MySQL выбрать из трех таблиц как один - PullRequest
0 голосов
/ 07 сентября 2011

У меня есть следующие таблицы:

| table_one | table_two | table_three | table_four |
| t_one_id  | t_two_id  | t_three_id  | t_four_id  | // primary key (auto increment)
|           | two_nid   | three_nid   | four_nid   | // foreign key to table_one.t_one_id
| tone_date | ttwo_date | tthree_date | tfour_date | // time this was posted.
// other fields

И следующий запрос

SELECT `table_two` . * ,  `table_three` . * ,  `table_four` . * 
FROM  `table_two` 
JOIN ( `table_three` ) ON `table_three`.`three_nid`=1
JOIN ( `table_four`  ) ON  table_four`.`four_nid`=1
WHERE  `table_two`.`two_nid`=1

И следующие данные:

table_one: 1, 11/08/2011
table_two: 1, 1, 12/08/2011
table_three: 1, 1, 13/08/2011
table_four: 1, 1, 14/08/2011

Теперь мой запрос продолжает возвращать ноль результатов, хотя, но я ищу его для возврата (при заказе на дату каждой таблицы):

result 1: 1 | 1 | 12/08/2011 | // this is from table_two
result 2: 1 | 1 | 13/08/2011 | // from table three
result 2: 1 | 1 | 14/08/2011 | // from four

Я также попробовал следующее, но безуспешно:

SELECT * FROM table_two t2, table_three t3, table_four t4 WHERE t2.two_nid = 1 OR t3.three_nid=1 OR t4.four_nid=1;

Где я ошибаюсь в своих SQL-запросах?

Заранее спасибо, если вам нужна дополнительная информация, не стесняйтесь спрашивать.

Ответы [ 3 ]

2 голосов
/ 07 сентября 2011

Если вы хотите отобразить результаты из каждой таблицы в виде отдельной строки, вам потребуется три отдельных выбора и ОБЪЕДИНЕНИЕ результатов.Попробуйте это:

SELECT `table_two` . * 
FROM  `table_one` 
JOIN ( `table_two` ) ON `table_two`.`two_nid`=`table_one`.`t_one_id`
WHERE  `table_one`.`t_one_id`=1
UNION
SELECT `table_three` . * 
FROM  `table_one` 
JOIN ( `table_three` ) ON `table_three`.`three_nid`=`table_one`.`t_one_id`
WHERE  `table_one`.`t_one_id`=1
UNION
SELECT `table_four` . * 
FROM  `table_one` 
JOIN ( `table_four` ) ON `table_four`.`four_nid`=`table_one`.`t_one_id`
WHERE  `table_one`.`t_one_id`=1
1 голос
/ 07 сентября 2011

Вы пытаетесь «объединить» результаты?Если это так, проверьте ключевое слово UNION .

1 голос
/ 07 сентября 2011
SELECT * FROM table1
JOIN table2 ON table1.one_nid=table2.two_nid
JOIN table3 ON table1.one_nid=table3.three_nid
WHERE table1.one_nid=1

... это, конечно, будет работать, только если будет гарантировано, что каждая строка в table1 имеет соответствующую строку с одинаковым идентификатором в каждой из других таблиц. В противном случае вы должны прочитать о LEFT JOIN с.

...