mysql 三表选一
我有以下表格:
| 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 查询哪里出了问题?
提前致谢,如果需要更多信息,请随时询问。
I've got the following tables:
| 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
And the following query,
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
And the following data:
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
Now my query keeps returning zero results, even though but what I am looking for it to return is (when ordered on the date of each table):
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
I have also tried the following but without success:
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;
Where am I going wrong with my SQL queries?
Thanks in advance, if more info needed, don't hesitate to ask.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
如果要将每个表的结果显示为单独的行,则需要进行三个单独的选择,并对结果进行 UNION。试试这个:
If you want to display the results from each table as a seperate row, you'll need to have three seperate selects, and UNION the results. Try this:
...这当然只有在保证
table1
中的每一行在其他每个表中都有一个具有相同 id 的对应行时才有效。否则,您应该阅读有关 LEFT JOIN 的内容。... this of course would only work if it's guaranteed that each row in
table1
has a corresponding row with the same id in each of the other tables. Otherwise, you should read aboutLEFT JOIN
s.您是否想“合并”结果?
如果是这样,请检查 UNION 关键字。
Are you trying to "combine" the results?
If so, check UNION keyword.