Mysql

在 MySQL 中執行 UNION 和 LEFT JOIN 之後

  • October 5, 2018

我有 3 張桌子

  • cdc_vw_Marbetes_Catalogo_Exis
  • tblAdditional Marbetes
  • tblMarbetesCongeladas

首先,我UNION用.cdc_vw_Marbetes_Catalogo_Exis``tblMarbetesAdicionales

(SELECT CLAVE_ART, DESCRIPCION_ART, EXISTENCIA_ART, MARCA_ART, exi_num_alm 
       FROM cdc_vw_Marbetes_Catalogo_Exis 
       WHERE EXISTENCIA_ART > 0 AND exi_num_alm = 25)
   UNION
(SELECT clave, descripcion, existencia, marca, almacen 
       FROM tblMarbetesAdicionales 
       WHERE almacen = 25)

聯合的結果:列(CLAVE)

2457-84735-001 (cdc_vw_Marbetes_Catalogo_Exis)
107067860P     (cdc_vw_Marbetes_Catalogo_Exis)
BS-113A        (cdc_vw_Marbetes_Catalogo_Exis)
6200           (tblMarbetesAdicionales)
6300           (tblMarbetesAdicionales)

表中tblMarbetesCongeladas有:

BS-113A
CS-23523
CS-120000
CV206ETCS

但是從那個聯合的結果中,我想做一個LEFT JOIN來獲取不在tblMarbetesCongeladas.

我試過這樣但它不起作用

(SELECT CLAVE_ART, DESCRIPCION_ART, EXISTENCIA_ART, MARCA_ART, exi_num_alm 
       FROM cdc_vw_Marbetes_Catalogo_Exis 
       WHERE EXISTENCIA_ART > 0 AND exi_num_alm = 25)
   UNION
(SELECT clave, descripcion, existencia, marca, almacen 
       FROM tblMarbetesAdicionales 
       WHERE almacen = 25)
   LEFT JOIN tblmarbetescongeladas ON cdc_vw_Marbetes_Catalogo_Exis.CLAVE_ART = tblmarbetescongeladas.clave WHERE cdc_vw_Marbetes_Catalogo_Exis.CLAVE_ART IS NULL

我期望的結果是

2457-84735-001 
107067860P    
6200          
6300  

我很欣賞這些建議

你是在正確的方式,但只是搞砸了語法。

SELECT t1.*
 FROM ( SELECT CLAVE_ART
             , DESCRIPCION_ART
             , EXISTENCIA_ART
             , MARCA_ART
             , exi_num_alm 
          FROM cdc_vw_Marbetes_Catalogo_Exis
         WHERE EXISTENCIA_ART > 0 
           AND exi_num_alm = 25

         UNION

        SELECT clave
             , descripcion
             , existencia
             , marca
             , almacen 
          FROM tblMarbetesAdicionales 
         WHERE almacen = 25
      ) AS t1
 LEFT JOIN tblmarbetescongeladas AS t2 ON t1.CLAVE_ART = t2.clave 
WHERE t2.clave IS NULL
;

引用自:https://dba.stackexchange.com/questions/219388