ПРИСОЕДИНЯЙТЕСЬ к трем столам

https://jsfiddle.net/dafemtg1/

FYI, CSS с использованием свойства преобразования:

img{transition:all 0.2s;}
img:hover {transform:scale(1.4);transition:all 0.2s;}

16
задан Hadonkey Donk 22 August 2010 в 04:30
поделиться

2 ответа

попробуйте что-нибудь вроде этого

SELECT A.* FROM TableA A
LEFT OUTER JOIN TableB B ON (A.id = B.a_id)
LEFT OUTER JOIN TableC C ON (A.id = C.a_id)
WHERE B.a_id IS NOT NULL 
  OR c.a_id IS NOT NULL
21
ответ дан 30 November 2019 в 12:27
поделиться

Чтобы понять, почему вы не получаете никаких результатов, когда в TableC нет записей, вам нужно немного узнать о типах JOIN в SQL.

По сути, когда вы задаете запрос

TableA A JOIN TableB B ON A.id = B.a_id

вы говорите базе данных просмотреть обе таблицыА и таблицуВ и получить все пары строк, которые удовлетворяют предикату join (A.id = B.a_id). Поэтому, если TableB пуста, база данных не сможет найти и пару строк с вышеупомянутыми критериями.

Этот тип JOIN называется INNER JOIN и является наиболее часто используемым типом операции объединения.

В вашем случае вы хотите получить все строки из TableA X TableB и все соответствующие строки из TableC, если такие строки существуют (на основе предиката объединения "A.id = C.a_id". Это происходит в случае OUTER JOIN. Два наиболее распространенных типа такого соединения - это LEFT JOIN (которое включает все строки из левой таблицы) и RIGHT JOIN (которое включает все строки из правой таблицы).

В этом случае ваш запрос должен выглядеть так:

SELECT A.*
FROM
  (TableA A JOIN Table B B ON A.id = B.a_id)
  LEFT JOIN TableC C ON A.id = C.a_ID

Я бы посоветовал взглянуть на соответствующую страницу Википедии, если вы хотите узнать больше о типах соединений в SQL

Edit

Следуя той же логике, если вы хотите получить все строки из TableA и только соответствующие строки из таблиц TableB и TableC (если они существуют), ваш запрос будет выглядеть так:

SELECT A.*
FROM
  (TableA A LEFT JOIN Table B B ON A.id = B.a_id)
  LEFT JOIN TableC C ON A.id = C.a_ID
10
ответ дан 30 November 2019 в 12:27
поделиться
Другие вопросы по тегам:

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