所以我有三个表涉及我的问题,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子句中的方式不同.
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.