Как я могу присоединиться к нескольким таблицам SQL с помощью идентификаторов?
У меня есть 4 разных таблицы, к которым я хочу присоединиться. Таблицы структурированы с помощью столбцов следующим образом:
TableA - aID | nameA | dID
TableB - bID | nameB | cID | aID
TableC - cID | nameC | date
TableD - dID | nameD
Начиная с таблицы A, я понимаю, как использовать JOIN таблицы a и c с помощью b, так как b имеет первичные ключи для этих таблиц. Я хочу также присоединиться к таблице TableD на TableA. Ниже мой оператор SQL, который сначала соединяет таблицы A и B, затем присоединяется к C:
SELECT TableA.*, TableB.*, TableC.* FROM (TableB INNER JOIN TableA
ON TableB.aID= TableA.aID)
INNER JOIN TableC ON(TableB.cID= Tablec.cID)
WHERE (DATE(TableC.date)=date(now()))
Когда я пытаюсь добавить другое соединение, чтобы включить D, я получаю сообщение об ошибке "TableD":
SELECT TableA.*, TableB.*, TableC.*, TableD.* FROM (TableB INNER JOIN TableA
ON TableB.aID= TableA.aID)
INNER JOIN TableC ON(TableB.cID= Tablec.cID)
INNER JOIN TableA ta ON(ta.dID= TableD.dID)
WHERE (DATE(TableC.date)=date(now()))
Ответы
Ответ 1
Вам нужно что-то большее:
SELECT TableA.*, TableB.*, TableC.*, TableD.*
FROM TableA
JOIN TableB
ON TableB.aID = TableA.aID
JOIN TableC
ON TableC.cID = TableB.cID
JOIN TableD
ON TableD.dID = TableA.dID
WHERE DATE(TableC.date)=date(now())
В вашем примере вы фактически не включаете TableD
. Все, что вам нужно сделать, это выполнить еще одно соединение, как вы это делали раньше.
Примечание: вы заметите, что я удалил многие из ваших круглых скобок, так как они действительно не нужны в большинстве случаев, которые у вас были у них, и добавляйте путаницу при попытке прочитать код. Правильное вложение - лучший способ сделать ваш код читаемым и отделенным.
Ответ 2
SELECT
a.nameA, /* TableA.nameA */
d.nameD /* TableD.nameD */
FROM TableA a
INNER JOIN TableB b on b.aID = a.aID
INNER JOIN TableC c on c.cID = b.cID
INNER JOIN TableD d on d.dID = a.dID
WHERE DATE(c.`date`) = CURDATE()
Ответ 3
Вы не присоединились к TableD, просто выбрали ПОЛЕ dID
(dID
) из одной из таблиц.
Ответ 4
Простой код INNER JOIN VIEW....
CREATE VIEW room_view
AS SELECT a.*,b.*
FROM j4_booking a INNER JOIN j4_scheduling b
on a.room_id = b.room_id;