MySQL选择不同的值并选择更多
我有一个具有指定id、value1、value2和value3的表 MyTable1如下所示: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 |
+------+--------+--------+--------+
| 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
不要使用隐式/逗号连接语法。始终使用显式连接语法。同样,不要使用逗号连接语法。