MySql-从三个表中选择不同的值

标签 mysql sql distinct

我有三个表,我想从表 1 中选择 DISTINCT * 并从表 2 中选择 cat,其中 vid 在表 3 中可用。

表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

我只想选择 ID 2 的详细信息一次,无论它从表 2“xy 还是 yz”中获取 cat。

谢谢....

最佳答案

现在使用现代的显式 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 并仍然获得预期的结果。

关于MySql-从三个表中选择不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41550713/

相关文章:

mysql - SQL 从同一表中的一组值中选择不同的值

php - 如何同步两台服务器以更改文件和数据库?

java - 如何确保 INSERT INTO 不会在 mySQL 数据库上添加相同的值

php - 在不重新加载页面的情况下从 MYSQL 表更新值?

sql - Oracle 10g 中的聚合字符串连接

MySQL : Get latest SCORE for each users where quiz_id = something

mysql - 哪个更快 : COUNT(DISTINCT Column) vs. COUNT(*) ... GROUP BY Column

php - 在php mysql中显示数组

sql - 在 T/SQL 中如何按一列分组并检索具有另一列最小值的行?

php - 检查用户是否已投票支持他可以投票的最大数量的项目