【问题标题】:MySQL Select distinct values and select moreMySQL 选择不同的值并选择更多
【发布时间】:2016-05-03 05:37:32
【问题描述】:

我有一个指定 id、value1、value2 和 value3 的表

MyTable1 如下所示:

+------+--------+--------+--------+
| ID   | VALUE1 | VALUE2 | VALUE3 |
+------+--------+--------+--------+
| 1    | 103    | 202    | 3212   |
| 2    | 103    | 202    | 7667   |
| 3    | 103    | 202    | 7567   |
| 4    | 103    | 203    | 6545   |
| 5    | 103    | 203    | 9787   |
| 6    | 106    | 203    | 6545   |
| 7    | 106    | 203    | 6575   |
| 8    | 106    | 202    | 8909   |
| 9    | 106    | 206    | 4656   |
| 10   | 106    | 205    | 5676   |
| 11   | 106    | 208    | 9088   |
| 12   | 107    | 202    | 8998   |
| 13   | 107    | 205    | 5675   |
| 14   | 107    | 204    | 9787   |
| 15   | 107    | 204    | 6454   |
| 16   | 107    | 206    | 9089   |
| 17   | 107    | 202    | 1233   |
| 18   | 107    | 205    | 8765   |
| 19   | 108    | 208    | 8900   |
| 20   | 103    | 205    | 6543   |
+------+--------+--------+--------+

MyTable2 看起来像这样:

+------+--------+--------+---------+
| ID   | VALUE1 | VALUE2 | STATUS  |
+------+--------+--------+---------+
| 1    | 103    | 209    | OK      |
| 2    | 105    | 203    | DEAD    |
| 3    | 107    | 205    | GOOD    |
| 4    | 104    | 202    | WRONG   |
| 5    | 103    | 203    | WOW     |
+------+--------+--------+---------+

当我想要结果时。我正在使用此代码。

SELECT DISTINCT value1,value2 FROM MyTable1 WHERE value1 = 103

结果如下所示。

+--------+---------+
| VALUE1 | VALUE2  |
+--------+---------+
| 103    | 202     |
| 103    | 203     |
| 103    | 205     |
+--------+---------+

但我想添加一个状态列,那就是 MyTable2

我尝试了类似的方法,但没有得到结果。

SELECT DISTINCT MyTable1.value1,MyTable1.value2,MyTable2.status FROM MyTable1,MyTable2 其中 MyTable1.value1 = 103 AND MyTable2.value1 = MyTable1.value1 AND MyTable2.value2 = MyTable1.value2

无论如何,我想要这个结果。

+--------+--------+---------+
| VALUE1 | VALUE2 | STATUS  |
+--------+--------+---------+
| 103    | 202    |         |
| 103    | 203    | WOW     |
| 103    | 205    |         |
+--------+--------+---------+

谢谢!!!

【问题讨论】:

  • 不要使用隐式/逗号连接语法。始终使用显式 JOIN 语法。那么你的问题就变得微不足道了。

标签: mysql select distinct


【解决方案1】:

这样的事情应该可以工作:

SELECT DISTINCT 
    tb1.value1,
    tb1.value2, 
    tb2.status
FROM 
    table1 tb1 
LEFT JOIN
   table2 tb2 on tb1.value1 = tb2.value1
   and tb1.value2 = tb2.value2
WHERE 
  tb1.value1 = 103

【讨论】:

    【解决方案2】:

    使用左连接(因为我们想要 T1 中的所有记录,但只需要 T2 中匹配的记录)

    SELECT DISTINCT T1.value1,T1.value2,T2.status 
    FROM MyTable1 T1
    LEFT JOIN MyTable2 T2
      on T2.value2 = T1.value2
     AND T2.value1 = T1.value1 
    WHERE T1.value1 = 103 
    

    或使用 group by 以防您需要对 value3 进行聚合

    SELECT T1.value1,T1.value2,T2.status 
    FROM MyTable1 T1
    LEFT JOIN MyTable2 T2
      on T2.value2 = T1.value2
     AND T2.value1 = T1.value1 
    WHERE T1.value1 = 103 
    GROUP BY T1.value1,T1.value2,T2.status 
    

    【讨论】:

      【解决方案3】:
      SELECT 
        mt1.value1, 
        mt1.value2, 
        mt2.status
      from mytable1 mt1, mytable2 mt2 
      where mt1.value1 = mt2.value1 and mt1.value1 = 103
      

      【讨论】:

      • 同样,不要使用逗号连接语法。
      猜你喜欢
      • 2018-07-31
      • 1970-01-01
      • 2017-03-25
      • 2015-01-15
      • 2011-02-16
      • 1970-01-01
      • 2018-05-28
      • 2011-11-07
      • 2011-04-14
      相关资源
      最近更新 更多