MySQL选择不同的值并选择更多

MySQL选择不同的值并选择更多,mysql,select,distinct,Mysql,Select,Distinct,我有一个具有指定id、value1、value2和value3的表 MyTable1如下所示: +------+--------+--------+--------+ | ID | VALUE1 | VALUE2 | VALUE3 | +------+--------+--------+--------+ | 1 | 103 | 202 | 3212 | | 2 | 103 | 202 | 7667 | | 3 | 103 | 202

我有一个具有指定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   |
+------+--------+--------+--------+
+------+--------+--------+---------+
| ID   | VALUE1 | VALUE2 | STATUS  |
+------+--------+--------+---------+
| 1    | 103    | 209    | OK      |
| 2    | 105    | 203    | DEAD    |
| 3    | 107    | 205    | GOOD    |
| 4    | 104    | 202    | WRONG   |
| 5    | 103    | 203    | WOW     |
+------+--------+--------+---------+
我的表2如下所示:

+------+--------+--------+--------+
| 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   |
+------+--------+--------+--------+
+------+--------+--------+---------+
| ID   | VALUE1 | VALUE2 | STATUS  |
+------+--------+--------+---------+
| 1    | 103    | 209    | OK      |
| 2    | 105    | 203    | DEAD    |
| 3    | 107    | 205    | GOOD    |
| 4    | 104    | 202    | WRONG   |
| 5    | 103    | 203    | WOW     |
+------+--------+--------+---------+
当我想要结果的时候。我正在使用这个代码

从MyTable1中选择不同的value1,value2,其中value1=103

结果是这样的

+--------+---------+
| VALUE1 | VALUE2  |
+--------+---------+
| 103    | 202     |
| 103    | 203     |
| 103    | 205     |
+--------+---------+
但我想添加一个状态列,这就是MyTable2

我试过这样的方法,但没有得到结果

从中选择不同的MyTable1.value1、MyTable1.value2、MyTable2.status MyTable1、MyTable2,其中MyTable1.value1=103和MyTable2.value1= MyTable1.value1和MyTable2.value2=MyTable1.value2

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

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

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

SELECT 
  mt1.value1, 
  mt1.value2, 
  mt2.status
from mytable1 mt1, mytable2 mt2 
where mt1.value1 = mt2.value1 and mt1.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 

像这样的方法应该会奏效:

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

不要使用隐式/逗号连接语法。始终使用显式连接语法。同样,不要使用逗号连接语法。