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)
如果可以保证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。
| 归档时间: |
|
| 查看次数: |
15576 次 |
| 最近记录: |