连接表和多个值的SQL查询

Red*_*Red 10 sql postgresql join

所以我有三个表涉及我的问题,2个常规表和一个连接表有一个很多,属于很多关系.它们看起来像这样:

table1
--id
--data

table2
--id
--data

table1_table2
--table1_id
--table2_id
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是我如何查询(使用连接)表格中的一个项目中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         |
+----------------------+
Run Code Online (Sandbox Code Playgroud)

我需要一个与表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
Run Code Online (Sandbox Code Playgroud)

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

我正在寻找的输出将是:

+---------------------+
|table1.id|table2.data|
+---------------------+
|4        |one        |
+---------------------+
|4        |two        |
+---------------------+
Run Code Online (Sandbox Code Playgroud)

Chr*_*ham 6

如果可以保证Table1_Table2表中没有重复项,则可以使用以下方法。也许您可以从这里开始并进行一些改进。请注意JOIN条件的工作原理-将IN置于联接条件下的方式与将IN条件置于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#)
Run Code Online (Sandbox Code Playgroud)

糟糕-您已经按照我建议的方式更改了问题,而忽略了您的修改。但这应该可以帮助您入门,因为它会返回您感兴趣的所有Table1 ID。