连接表和多个值的SQL查询

前端之家收集整理的这篇文章主要介绍了连接表和多个值的SQL查询前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
所以我有三个表涉及我的问题,2个常规表和一个连接表,有很多,属于很多关系.它们看起来像这样:
table1
--id
--data

table2
--id
--data

table1_table2
--table1_id
--table2_id

所以,我的问题是我如何查询(使用连接)表格中的一个项目中table1_table2中有一个或多个值的内容.例如:

Table 1
+----------+
|id | data |
+----------+
|1  | none |
+----------+
|4  | match|
+----------+

Table 2
+----------+
|id | data |
+----------+
|1  | one  |
+----------+
|2  | two  |
+----------+

table1_table2
+----------------------+
|table1_id | table2_id |
+----------------------+
|1         | 1         |
+----------------------+
|4         | 1         |
+----------------------+
|4         | 2         |
+----------------------+

我需要一个与表1行id 4匹配的查询,因为它有一个通过连接的链接到表2中的第1行和第2行.如果这很令人困惑,请问任何问题.

也许我有点不清楚,我使用table1_table2作为连接而不是来自.我需要确保它与表2中的1和2相匹配.

这是我到目前为止的查询

SELECT DISTINCT table1.id,table2.data

FROM table1

LEFT JOIN table1_table2 ON table1.id = table1_table2.table1_id
LEFT JOIN table2 ON table2.id = table1_table2.table2_id

我需要一个能够使表1中的条目与表2中的1和2匹配的位置.

我正在寻找的输出将是:

+---------------------+
|table1.id|table2.data|
+---------------------+
|4        |one        |
+---------------------+
|4        |two        |
+---------------------+

解决方法

如果您可以保证Table1_Table2表中没有重复项,则以下方法有效.也许你可以从这里开始并稍微细化一下.注意JOIN条件是如何工作的 – 将IN放在连接条件中的工作方式与将WH条件放在WHERE子句中的方式不同.

我已经将哈希标记用于将代码插入sql所需的值.

SELECT Table1.id,COUNT(Table1_Table2.Table2_id)
FROM Table1
JOIN Table1_Table2 ON (Table1_Table2.Table1_id = Table1.id
                   AND Table1_Table2.Table2_id IN (#somelist#))
GROUP BY Table1.id
HAVING COUNT(Table1_Table2.Table2_id) = (#length of somelist#)

哎呀 – 你已经按我建议的方式改变了你的问题,我忽略了你的编辑.但这应该让你开始,因为它返回你感兴趣的所有Table1 id.

猜你在找的MsSQL相关文章