Mysql 如何在特定列上使用选项值联接2个表
关于表1Mysql 如何在特定列上使用选项值联接2个表,mysql,sql,Mysql,Sql,关于表1 +-------+-------+ | unid1 | unid2 | +-------+-------+ | 1 | 1 | | 2 | 2 | | 3 | 3 | +-------+-------+ 表2 +---------+-------+-------+------+ | tableid | unid1 | unid2 | type | +---------+-------+-------+------+ | 1
+-------+-------+
| unid1 | unid2 |
+-------+-------+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
+-------+-------+
表2
+---------+-------+-------+------+
| tableid | unid1 | unid2 | type |
+---------+-------+-------+------+
| 1 | 1 | 1 | 1 |
| 2 | 2 | 2 | 1 |
| 3 | 3 | 3 | 1 |
| 4 | 3 | 0 | 2 |
| 5 | 3 | 0 | 2 |
| 6 | 4 | 4 | 3 |
| 7 | 5 | 5 | 3 |
+---------+-------+-------+------+
预期结果
+-------+-------+------+
| unid1 | unid2 | type |
+-------+-------+------+
| 1 | 1 | 1 |
| 2 | 2 | 1 |
| 3 | 3 | 1 |
| 3 | 0 | 2 |
| 3 | 0 | 2 |
+-------+-------+------+
我的SQL代码
select t1.*, t2.* from table1 t1
left join table2 t2 on t1.unid1 = t2.unid1 and t1.unid2 = t2.unid2 and
t2.type in (1 , 2);
我的SQL查询没有给出我想要的结果,如何才能得到我想要的结果。您的预期输出意味着您希望保留
表2中的所有行,其unid1
值可以在表1
中找到。如果是这样,那么我们可以在unid1
列中对这两个表进行内部联接。这假设unid1
在表1
中是唯一的
SELECT t2.unid1, t2.unid2, t2.type
FROM table2 t2
INNER JOIN table1 t1
ON t2.unid1 = t1.unid1;
如果我理解正确,您希望输出值,其中Table1
中的行与Table2
中的unid1
和unid2
两列中的行匹配,并且类型必须包含所需的值
SELECT b.unid1, b.unid2, b.type
FROM table1 a
INNER JOIN table2 b
ON a.unid1 = b.unid1
WHERE EXISTS
(
SELECT 1
FROM Table1 t1
INNER JOIN Table2 t2
ON t1.unid1 = t2.unid1
AND t1.unid2 = t2.unid2
WHERE t2.type in (1,2)
AND a.unid1 = t1.unid1
)
这里有一个。您需要一个简单的联接,查看输入和输出时,两个表中的联接列似乎都是uniq1。要获得所需的输出,应用什么逻辑?数据集不是很有代表性,是吗。最好能考虑一下这些事情