我有3个表,我想加入,最后的表可能缺少一个记录。我想确定它在不在那里。注意,表3的SignalType没有为10,ConversionParameter没有为38。因此,我的结果集应该有4条记录,其中一条应为表3的null。
表1:
<表类>id 算法 tbody><<tr>37 40 3840 表类>
考虑使用嵌套查询的右连接:
SELECT *
FROM Table3
RIGHT JOIN (
SELECT *
FROM Table1 INNER JOIN Table2
ON Table1.algorithm = Table2.ConversionAlgorithm) AS Query1
ON (Table3.ConversionParameter = Query1.Table1.id) AND (Table3.SignalType = Query1.Table2.id);
两个算法字段都没有唯一的值,因此连接导致记录的笛卡尔关联-每个表中每个算法值的所有记录都与其他表中相同值的所有记录相关联。这提供了表1的所有可能组合。id和表2。Id和算法数据。然后,该查询与表3的复合右连接将显示表3中缺少哪些SignalType和converversionparameter对。
感谢@June7让我走上了正确的道路。下面是我使用他的子选择的建议得出的解决方案:
select * from (
select * from table1 t1
inner join table2 t2 on t2.conversionalgorithm = t1.algorithm) as q
left join table3 t3 on (t3.conversionparameter = q.t1.id) and (q.t2.id = t3.logicalsignaltype)