Задать вопрос
paveluho
@paveluho

Как составить MySql запрос в двух таблицах?

Здравствуйте!

уже голова кипит, помогите составить запрос более правильно к двум таблицам.

Имеются две таблицы: adress и zakaz
В таблице zakaz содержится pid_adress и pid_user
В таблице adress содержится code_adress и dostavka
таблица zakaz:                 таблица adress:
-------------------------       -----------------------------
pid_adress | pid_user           code_adress | dostavka
-------------------------       -----------------------------

Теперь дальше, в таблицу zakaz делается запрос на выборку ВСЕХ заказов pid_user, хорошо. Выбираются все заказы.
Предположим их 100 штук.
Как составить запрос так, чтобы во вторую таблицу делался запрос с таким условием, если в таблице adress будут отсутствовать результаты к данному заказу?

я написал вот так, но не правильно это точно:
SELECT *	FROM adress a INNER JOIN zakaz z ON z.pid_user = '2' AND z.pid_adress = a.code_adress


В этом выражении что - то не то, т.к. делаю прямой запрос в таблицу zakaz (с уникальным id пользователя - '2'):
SELECT * FROM zakaz z WHERE z.pid_user = '2'
Нашлось 100 заказов.

Делаю прямой запрос в таблицу adress, взятых вручную из таблицы zakaz - pid_adress (уникальный, допустим = 203, относящиеся к юзеру '2'):
SELECT * FROM adress a WHERE a.code_adress = '203'
В результате такого адреса не существует.

Вообще у пользователя с уникальным id - '2' не существует ни одного адреса в таблице adress, НО присутсвуют результаты в таблице zakaz.

Теперь поясню цель и суть данного:
Дело в том что адреса аннулируются автоматически, а заказы остаются (не скажу для чего, конфиденциальная информация). Требуется правильно вывести данные из таблицы adress, если как таковые в таблице присутствую данные.

Подскажите решение )
  • Вопрос задан
  • 141 просмотр
Подписаться 1 Оценить Комментировать
Решения вопроса 1
@dmitryKovalskiy
программист средней руки
На мой взгляд у вас банально нарушена целостность данных. Идентификатор есть, а связанных данных нету. Это плохо.
Если забыть про быстродействие, то можно так
select * from zakaz where pid_adressNOT IN ( select code_adress from adress)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы