【问题标题】:MySql- Select DISTINCT value from three tablesMySql- 从三个表中选择 DISTINCT 值
【发布时间】:2017-01-09 14:55:36
【问题描述】:

我有三个表,我想从表 1 中选择 DISTINCT * 并从表 2 中选择其 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 的详细信息,这并不重要,它需要 cat 从 Table2“xy 或 yz”中获取。

谢谢....

【问题讨论】:

  • 您可以在 cat 或 vid 上使用 max 或 min,但似乎键的强度不够有效
  • 你总是可以GROUP BY Table1.id ...也许
  • 今日提示:切换到现代、明确的JOIN 语法。更容易编写(没有错误),更容易阅读和维护,如果需要更容易转换为外连接。
  • @apokryfos 感谢为我工作......
  • 你在什么基础上区分'xy'和'yz'作为你想为id 2获得的cat值?它们似乎同样可行。

标签: mysql sql distinct


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    很简单,不用join查询就可以得到你想要的输出。使用简单查询而不是使用连接查询更明智。因为它更快且不复杂。如果您不需要串行 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
    

    【讨论】:

      猜你喜欢
      • 2011-11-25
      • 2020-11-03
      • 2012-10-29
      • 1970-01-01
      • 2011-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多