MySql-从三个表

时间:2017-01-09 14:55:37

标签: mysql sql distinct

我有三个表,我想从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的详细信息。

...谢谢

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