SQL与非';不直接相关

SQL与非';不直接相关,sql,join,union,Sql,Join,Union,我需要使用SQL执行查找,以查看这3列是否与我的id匹配。我尝试了联接,但这些列没有任何联接点。没有明确的相关性。我也尝试了UNION,但它们有不同的列数和不同的列数据类型。基本上,我需要在1个表中找到一个值。使用该值深入第二个表以获得附加值。然后将这两个值与硬编码值一起放入第三个表中以检索唯一值。然后使用该唯一值深入第四个表,以获得与该唯一值匹配的结果。以下是我目前的查询: SELECT * FROM DEF_TABLE WHERE DEF_ID IN ( SELECT DEF_ID FROM

我需要使用SQL执行查找,以查看这3列是否与我的id匹配。我尝试了联接,但这些列没有任何联接点。没有明确的相关性。我也尝试了UNION,但它们有不同的列数和不同的列数据类型。基本上,我需要在1个表中找到一个值。使用该值深入第二个表以获得附加值。然后将这两个值与硬编码值一起放入第三个表中以检索唯一值。然后使用该唯一值深入第四个表,以获得与该唯一值匹配的结果。以下是我目前的查询:

SELECT * FROM DEF_TABLE
WHERE DEF_ID IN (
SELECT DEF_ID FROM DESCRIPTION_TABLE 
    WHERE MY_TYPE = 'EQP'
    AND COL_TYPE = a
    AND COL_NAME = b
        IN (SELECT COL_TYPE as a, COL_NAME as b FROM TYPE_TABLE WHERE COL_TYPE IN
           (SELECT COL_TYPE FROM EQP_TABLE WHERE ID = 9000)));

编辑:我发现将COL_TYPE和COL_NAME检查作为单独的调用运行是可行的,但速度非常慢。还有别的办法吗

SELECT * FROM DEF_TABLE
WHERE DEF_ID IN (
SELECT DEF_ID FROM DESCRIPTION_TABLE 
    WHERE MY_TYPE = 'EQP'
    AND COL_TYPE IN (SELECT COL_TYPE FROM TYPE_TABLE WHERE COL_TYPE IN
                    (SELECT COL_TYPE FROM EQP_TABLE WHERE ID = 9000))
    AND COL_NAME IN (SELECT COL_NAME FROM TYPE_TABLE WHERE COL_TYPE IN
                    (SELECT COL_TYPE FROM EQP_TABLE WHERE ID = 9000)));

在我看来,你想做的是

SELECT * FROM DEF_TABLE
WHERE DEF_ID IN (
    SELECT DT.DEF_ID 
    FROM DESCRIPTION_TABLE DT 
        JOIN TYPE_TABLE TT 
        ON   DT.COL_TYPE = TT.COL_TYPE
        AND  DT.COL_NAME = TT.COL_NAME
        JOIN EQP_TABLE ET
        ON   DT.COL_TYPE = ET.COL_TYPE
    WHERE DT.MY_TYPE = 'EQP'
      AND ET.ID = 9000 )

非常感谢你!这很有魅力。我没有考虑在这样的查询中尝试加入一个连接。