很抱歉,标题不太清楚,坦率地说,我真的不知道如何用简单的单词来解释它。我有以下问题。
我有这个查询:
SELECT EQUIPO.EQUI_SERIE
FROM EQUIPO
LEFT JOIN ASIGNACION ON EQUIPO.EQUI_SERIE = ASIGNACION.EQUI_SERIE
WHERE ASIG_ACTIVA = 'No'
ORDER BY EQUI_SERIE ASC;
我希望它显示EQUIPO表中所有在ASIGNACION表中被引用或未被引用的元素,如果被引用,我希望它仅显示那些在其上具有“否”值的元素。 ASIG_ACTIVA列。我尝试了不同的方法,但无法从互联网上找到所需的内容。任何帮助将不胜感激。
答案 0 :(得分:2)
更改连接条件,在连接上添加ASIG_ACTIVA = 'No'
SELECT EQUIPO.EQUI_SERIE
FROM EQUIPO
LEFT JOIN ASIGNACION ON EQUIPO.EQUI_SERIE = ASIGNACION.EQUI_SERIE
and ASIG_ACTIVA = 'No'
ORDER BY EQUI_SERIE ASC;
答案 1 :(得分:1)
您可以通过限制联接表来做到这一点。
SELECT EQUIPO.EQUI_SERIE
FROM EQUIPO
LEFT JOIN ASIGNACION ON EQUIPO.EQUI_SERIE = ASIGNACION.EQUI_SERIE
AND ASIGNACION.ASIG_ACTIVA = 'No'
ORDER BY EQUI_SERIE ASC;
通过将AND
添加到联接中,可以将联接表ASIGNACION
限制为仅在列no
中具有ASIGN_ACTIVE
的行
这样您将获得ASIGNACION
中所有相关且具有no
作为值的行。
由于它是左联接,因此对于不相关或具有yes
作为值的每一行,您还将获得NULL。
答案 2 :(得分:1)
猜测 ,其中ASIG_ACTIVA
是表ASIGNACION
中的一列,而不是EQUIPO
(这就是别名很重要的原因)。如果是这样,请将WHERE
移至ON
SELECT E.EQUI_SERIE
FROM EQUIPO E
LEFT JOIN ASIGNACION A ON E.EQUI_SERIE = A.EQUI_SERIE
AND A.ASIG_ACTIVA = 'No'
ORDER BY E.EQUI_SERIE ASC;
答案 3 :(得分:0)
作为其他答案的补充,我将向您解释为什么您的查询无法按预期运行,您得到了以下信息:
SELECT EQUIPO.EQUI_SERIE
FROM EQUIPO
LEFT JOIN ASIGNACION ON EQUIPO.EQUI_SERIE = ASIGNACION.EQUI_SERIE
WHERE ASIGNACION.ASIG_ACTIVA = 'No'
ORDER BY EQUIPO.EQUI_SERIE ASC;
这里的问题是where子句正在过滤那些具有ASIGNACION.ASIG_ACTIVA作为NULL的值(基于LEFT JOIN),并且据我所知,您需要具有NULL或“ No”值的记录。 因此,您可以使用上面给出的解决方案,或者仅添加到where子句:“ OR ASIGNACION.ASIG_ACTIVA IS NULL”,获得以下信息:
SELECT EQUIPO.EQUI_SERIE
FROM EQUIPO
LEFT JOIN ASIGNACION ON EQUIPO.EQUI_SERIE = ASIGNACION.EQUI_SERIE
WHERE ASIGNACION.ASIG_ACTIVA = 'No' OR ASIGNACION.ASIG_ACTIVA IS NULL
ORDER BY EQUIPO.EQUI_SERIE ASC;