2016-03-01 90 views
0

这是情况。我有两个参数查询: ITEM_CODE ITEM_TYPE如果在第一个表中找不到记录,请从另一个表中选择 - SQL Server 2012

的first_table包含: ITEM_CODE,Item_Characteristics

的second_table包含: ITEM_TYPE,Item_Characteristics

我的目标是让item_characteristics。如果在第一个表中找不到特定的项目,我想使用Item_type从第二个表中获取它们。

任何方式,这可以在一个单一的查询?

我使用SQL Server 2012的

+0

看看这个[SO问题](http://stackoverflow.com/questions/18891453/mssql-select-from-another-table-if-no-results-from-the-first-table) – Icemanind

回答

2

一种方法是使用not exists

select t1.Item_Characteristics 
from t1 
where t1.item_code = @Item_Code 
union all 
select t2.Item_Characteristics 
from t2 
where t2.item_type = @Item_Type and 
     not exists (select 1 from t1 where t1.item_code = @Item_Code); 
2

您可以在案件Item_Code一个FULL JOINItem_Type尝试是同一类型的:

这样的
SELECT COALESCE(t1.Item_Characteristics, t2.Item_Characteristics) AS Item_Characteristics 
FROM table1 AS t1 
FULL JOIN table2 AS t2 
    ON t1.Item_Code = t2.Item_Type 
WHERE COALESCE(t1.Item_Code, t2. Item_Type) = @param 
+0

I理解答案(虽然不正确),但不是upvote。该问题显式指定了两个参数,而不是一个,并且没有提示可以像这样连接表。 –

+0

对不起,如果我不清楚。要查询的参数可以是item_code或item_type,根据哪个人获得item_characteristics。如果两者都可以让我得到item_characteristics,那么我想用更具体的item_code。 – everydaylearn

+0

@everydaylearn然后看看Gordon Linoff的答案。 –

0

让我知道这是否可行 -

select isnull(a.Item_Characteristics,b.item_type) 
from first_table as a 
left join second_table as b 
on a.Item_Characteristics = b.Item_Characteristics 
where a.Item_code = @itemcode and b.Item_type = @itemtype 
相关问题