MySQL Beginner Join Query - PullRequest
       2

MySQL Beginner Join Query

1 голос
/ 08 августа 2011

Схема: tblCusotmers хранит клиентов, tblAddresses хранит их адреса, у каждого клиента есть много адресов;

tblCustomers customer_id: 1 название: XYZ Corp

tblAddresses address_id: 1 customer_id: 1

address_id: 2 customer_id: 1

address_id: 3 customer_id: 1

Я хочу, учитывая идентификатор адреса, получить все идентификаторы адресов адресов, принадлежащих одному и тому же клиенту. Поэтому, учитывая приведенный выше пример, учитывая адрес ID 3, я хочу, чтобы числа 1, 2 и 3 возвращались.

Я уверен, что это простое соединение, но я пытался и пытаюсь решить это в своей голове, и не могу. Может кто-нибудь, пожалуйста, позорить меня?

Ответы [ 2 ]

3 голосов
/ 08 августа 2011

СОЕДИНЕНИЯ являются инструментом для работы.Вообще говоря, подзапросы должны использоваться только для действий, которые не могут быть выполнены с помощью JOIN.

Это должен быть оптимальный способ получить то, что вы хотите (убедитесь, что существует индекс для tblAddresses.customer_id):

SELECT t2.id
FROM tblAddresses AS t1
JOIN tblAddresses AS t2 ON t2.customer_id = t1.customer_id
WHERE t1.address_id = 3
2 голосов
/ 08 августа 2011
SELECT * 
FROM tblAddresses 
WHERE customer_id = (SELECT customer_id FROM tblAddresses WHERE address_id=3)

Это использует подзапрос, чтобы получить customer_id для правильной строки и использует его в предложении where. Документы MySQL по подзапросам

С JOIN (немного сложнее, но, как вы и просили):

SELECT t1.*
FROM tblAddresses AS t1
INNER JOIN (SELECT customer_id FROM tblAddress WHERE address_id=3) AS t2
ON t1.customer_id = t2.customer_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...