我需要在表中选择值= 1的所有IsActive列,但如果另一个表在ItemName列上匹配,我需要从另一个表中获取该行。
示例:table1
--------------------------------------------
ItemName | Cost | Price | IsActive
--------------------------------------------
Item1 | 4.50 | 5.00 | 1
--------------------------------------------
Item2 | 3.00 | 3.50 | 0
--------------------------------------------
Item3 | 1.75 | 2.40 | 1
--------------------------------------------
Item4 | 2.55 | 3.05 | 1
示例:table2
--------------------------------------------
ItemName | Cost | Price | IsActive
--------------------------------------------
Item1 | 5.50 | 6.70 | 1
--------------------------------------------
Item8 | 3.00 | 3.50 | 0
--------------------------------------------
Item8 | 3.50 | 4.50 | 1
--------------------------------------------
Item3 | 2.75 | 3.40 | 1
--------------------------------------------
Item5 | 2.60 | 3.90 | 1
结果需要这样:
--------------------------------------------
ItemName | Cost | Price | IsActive
--------------------------------------------
Item1 | 5.50 | 6.70 | 1
--------------------------------------------
Item3 | 2.75 | 3.40 | 1
--------------------------------------------
Item4 | 2.55 | 3.05 | 1
--------------------------------------------
Item5 | 2.60 | 3.90 | 1
--------------------------------------------
Item8 | 3.50 | 4.50 | 1
基本上,如果ItemName存在于table2中,则在IsActive = 1的位置获取它,否则从table1获取它,其中IsActive = 1。
如何在单个MySQL语句中执行此操作?有人能提供一个例子吗?另请注意,table2
也可能完全为空。我需要ItemName ASC
订购的结果,并且所有IsActive值都需要1
,因为这需要在WHERE clause
我设置的查询分页集中设置,并且正在使用LIMIT(0,20)也是如此,所以我需要保持分页,所以它需要在1个查询中工作。
这对我来说似乎很基础,但我却在如何简单地处理这个简单的MySQL语句而苦苦挣扎。如果有人可以提供这样的MySQL示例,那么它将优先于SQL,因为2不同并且我需要使用MySQL。
答案 0 :(得分:1)
您可以像这样使用NOT EXISTS和UNION ALL:
select *
from table1 t1
where isActive = 1
and not exists (
select 1
from table2 t2
where t1.ItemName = t2.ItemName
and t2.isActive = 1
)
union all
select *
from table2 t1
where isActive = 1;