MySQL从表中抓取(如果存在),否则使用不同的表

MySQL从表中抓取(如果存在),否则使用不同的表,mysql,sql,union,Mysql,Sql,Union,我需要选择表中值为1的所有IsActive列,但是如果另一个表的ItemName列上有匹配项,我需要从另一个表中获取该行 示例:表1 -------------------------------------------- ItemName | Cost | Price | IsActive -------------------------------------------- Item1 | 4.50 | 5.00 | 1 ---------------

我需要选择表中值为1的所有IsActive列,但是如果另一个表的ItemName列上有匹配项,我需要从另一个表中获取该行

示例:
表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,这正是我需要的!我知道这应该是可能的!