Sql 如果一行没有';我不能从另一张桌子上取

Sql 如果一行没有';我不能从另一张桌子上取,sql,Sql,我有三个表,它们之间都有一个共同的产品代码,语言是唯一不同的变量。所以第一个表是所有语言,第二个EN和第三个DE在我的数据库的Lang列下 所以对于这个问题,我想简单地说明,如果在表“all”中,产品代码存在,并且带有“EN”表中的lang“EN”,那么请保留该记录,如果没有找到该记录,请在带有“DE”lang代码的“DE”表中找到该记录,并保留该记录 主键是表之间的SAP_NO,但我不确定如何将其合并到语句中 select [Qry Acc Ass Grp All SKUs].COM_COD

我有三个表,它们之间都有一个共同的产品代码,语言是唯一不同的变量。所以第一个表是所有语言,第二个EN和第三个DE在我的数据库的Lang列下

所以对于这个问题,我想简单地说明,如果在表“all”中,产品代码存在,并且带有“EN”表中的lang“EN”,那么请保留该记录,如果没有找到该记录,请在带有“DE”lang代码的“DE”表中找到该记录,并保留该记录

主键是表之间的SAP_NO,但我不确定如何将其合并到语句中

select 
[Qry Acc Ass Grp All SKUs].COM_CODE, 
    [Qry Acc Ass Grp All SKUs].SAP_NO, 
    [Qry Acc Ass Grp All SKUs].MANUF_CODE, 
    [Qry Acc Ass Grp All SKUs].MANUF_PART_NO, 
    [Qry Acc Ass Grp All SKUs].SHORT_TEXT_ENG, 
    [Qry Acc Ass Grp All SKUs].MAT_CLASS, 
    [Qry Acc Ass Grp All SKUs].ASSIGNMENT_GRP, 
    [Qry Acc Ass Grp All SKUs].LANG, 
    [Qry Acc Ass Grp All SKUs].DESCR

From  ([Qry Acc Ass Grp All SKUs], [Qry Acc Ass Grp EN] , [Qry Acc Ass Grp DE]

IF EXISTS    
    (
    SELECT *     
    FROM [Qry Acc Ass Grp All SKUs], [Qry Acc Ass Grp EN]    
    WHERE  [Qry Acc Ass Grp All SKUs].LANG = [Qry Acc Ass Grp EN].LANG   

    )    
ELSE
    IF NOT EXISTS
        (
        SELECT *     
    FROM([Qry Acc Ass Grp All SKUs], [Qry Acc Ass Grp DE]    
    WHERE  [Qry Acc Ass Grp All SKUs].LANG = [Qry Acc Ass Grp DE].LANG   
        )


        END;

提前感谢您的帮助和时间

也许你可以用union解决这个问题。只需选择两者,并获取第一个

SELECT TOP 1 *
FROM (
  SELECT Column FROM Language1 -- IF NULL, THEN Language2 is first row
  UNION
  SELECT Column FROM Language2
) tbl

如果您使用的是SQL Server,则可以使用
交叉应用
执行此操作。查询如下所示:

select *
from [Qry Acc Ass Grp All SKUs] a CROSS APPLY
     (select top 1
      from ((select 'EN' as language, 1 as priority, l.* from [Qry Acc Ass Grp EN] l
            ) union all
            (select 'DE' as language, 2 as priority, l.* from [Qry Acc Ass Grp DE] l
            )
           ) l
      order priority
     ) l

这通常是通过使用一种具有左连接的最佳匹配来完成的:

select 
   sku.COM_CODE, 
   sku.SAP_NO, 
   sku.MANUF_CODE, 
   sku.MANUF_PART_NO, 
   sku.SHORT_TEXT_ENG, 
   sku.MAT_CLASS, 
   sku.ASSIGNMENT_GRP, 
   sku.LANG, 
   sku.DESCR,
   coalesce(en.column1, de.column1),-- if english exists, use it, otherwise deutsch
   coalesce(en.column2, de.column2)
From  ([Qry Acc Ass Grp All SKUs] as sku
join [Qry Acc Ass Grp EN] as en -- join english data
  on sku.LANG = en.LANG 
 and sku.SAP_NO = en.SAP_NO
left join [Qry Acc Ass Grp DE] as de -- join german data
  on sku.LANG = de.LANG   
 and sku.SAP_NO = de.SAP_NO

我不完全理解表之间的引用,但您应该尝试以下方法:

SELECT [SKUs].COM_CODE, 
    [SKUs].SAP_NO, 
    [SKUs].MANUF_CODE, 
    [SKUs].MANUF_PART_NO, 
    [SKUs].SHORT_TEXT_ENG, 
    [SKUs].MAT_CLASS, 
    [SKUs].ASSIGNMENT_GRP, 
    COALESCE([EN].LANG, [DE].LANG, [SKUs].LANG) LANG, 
    COALESCE([EN].DESCR, [DE].DESCR, [SKUs].DESCR) DESCR
 FROM [SKUs] 
 LEFT JOIN [EN] ON [EN].SAP_NO = [SKUs].SAP_NO 
 LEFT JOIN [EN] ON [DE].SAP_NO = [SKUs].SAP_NO 
即时通讯使用:

合并-获取此订单的第一个非空值i EN,DE SKU


左连接-如果[EN]或[DE]引用的行不存在,则不限制[SKU]表中的记录

您使用的DMS是什么?是SQL Server吗?神谕另外