У меня есть 4 разных стола, к которым я хочу присоединиться. Таблицы имеют следующую структуру столбцов:
TableA - aID | nameA | dID
TableB - bID | nameB | cID | aID
TableC - cID | nameC | date
TableD - dID | nameD
Начиная с таблицы A, я понимаю, как СОЕДИНЯТЬ таблицы 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()))
JOINTableC
это так,ON
TableC.cID = TableB.cID
а почему нетTableC.cID = TableA.cID
. Я предположил, что мы присоединяемсяTableA
к другим трем столам.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()
источник
Вы не присоединились к TableD, просто выбрали TableD FIELD (
dID
) из одной из таблиц.источник
CREATE VIEW room_view AS SELECT a.*,b.* FROM j4_booking a INNER JOIN j4_scheduling b on a.room_id = b.room_id;
источник