MySQL从表中抓取(如果存在),否则使用不同的表
我需要选择表中值为1的所有IsActive列,但是如果另一个表的ItemName列上有匹配项,我需要从另一个表中获取该行 示例:MySQL从表中抓取(如果存在),否则使用不同的表,mysql,sql,union,Mysql,Sql,Union,我需要选择表中值为1的所有IsActive列,但是如果另一个表的ItemName列上有匹配项,我需要从另一个表中获取该行 示例:表1 -------------------------------------------- ItemName | Cost | Price | IsActive -------------------------------------------- Item1 | 4.50 | 5.00 | 1 ---------------
表1
--------------------------------------------
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
示例:表2
--------------------------------------------
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存在于表2中,则从IsActive=1的表1中获取,否则从IsActive=1的表1中获取
如何在一个MySQL语句中实现这一点?有人能举个例子吗?另外,请注意,表2也可能完全为空。我需要按ItemName ASC
排序的结果,当然,所有的IsActive值都需要1
,因为这需要在WHERE子句中设置,我在查询中设置了分页,并且正在对其使用LIMIT(0,20),所以我需要保持分页,所以它需要在1个查询中工作
这对我来说似乎是非常基本的,但奇怪的是,我一直在为如何完成这个简单的MySQL语句而挣扎。如果有人能提供一个MySQL的例子,这将是优于SQL的,因为2个不同,我需要使用MySQL。您可以使用NOT EXISTS和UNION,如下所示:
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;
select 1
的作用是什么?如果存在具有匹配条件的行,它将为每行选择值1,然后,“NOT EXISTS”将检查是否存在任何行。它不关心行中包含的内容。@Solomon为您添加了一个演示,许多GurV,这正是我需要的!我知道这应该是可能的!