我有三个表,我想从table1中选择SELECT DISTINCT *,从table2中获取那些vid在table3中可用的表。
表1
id fname area price
1 ABC Mall R 1500
2 ABd Mall a 1400
3 ABe Mall f 1200
4 ABt Mall b 1000
表2
id catid cat
1 2 xy
2 2 yz
3 1 yxx
4 4 ytt
5 3 xy
表3
id vid
1 2
2 1
3 4
到目前为止,我所尝试的是
SELECT * FROM Table1,Table2,Table3
WHERE
Table1.id=Table2.catid AND
Table1.id=Table3.vid;
输出我
id fname area price cat
1 ABC Mall R 1500 yxx
2 ABd Mall a 1400 xy
2 ABd Mall a 1400 yz
4 ABt Mall b 1000 ytt
所需输出
id fname area price cat
1 ABC Mall R 1500 yxx
2 ABd Mall a 1400 xy
4 ABt Mall b 1000 ytt
我想从表2" xy或yz"中选择cat并不重要,只需选择ID 2的详细信息。
...谢谢
答案 0 :(得分:4)
现在使用现代的,显式的JOIN
语法和表别名。
子查询只返回每个catid的最大cat值。
SELECT t1.id, t1.fname, t1.area, t1.price, t2.cat
FROM Table1 t1
JOIN (select catid, max(cat) cat from Table2 group by catid) t2 ON t1.id = t2.catid
JOIN Table3 t3 ON t1.id = t3.vid
我不明白为什么在查询中包含Table3。你可以删除最后一个JOIN并仍然得到预期的结果。
答案 1 :(得分:0)
这很简单,你可以在没有连接查询的情况下获得你想要的输出。使用简单查询而不是使用连接查询更明智。因为它更快而且不复杂。如果您不需要序列智能ID,则可以忽略
order by t1.id
。如果不需要,忽略order by
也更明智。希望它会对你有所帮助。
SELECT t1.id,t1.fname,t1.area,t1.price,t2.cat
FROM table1 as t1, table2 as t2, table3 as t3
WHERE t1.id = t2.catid and t2.catid = t3.vid
group by t1.id order by t1.id