簡體   English   中英

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

[英]MySQL Grab From Table if Exists, otherwise use Different Table

我需要選擇表中值 = 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 的位置獲取它,否則從 IsActive = 1 的 table1 獲取它。

如何在單個 MySQL 語句中執行此操作? 有人可以提供一個例子嗎? 另外,請注意, table2也可能完全為空。 我需要按ItemName ASC排序的結果,當然所有 IsActive 值都需要為1 ,因為這需要在WHERE clause設置,我在查詢上設置了分頁,並且還在其上使用了 LIMIT (0, 20),所以我需要保持分頁,所以它需要在 1 個查詢內工作。

這對我來說似乎非常基本,但我在如何奇怪地執行這個簡單的 MySQL 語句方面苦苦掙扎。 如果有人可以提供這樣的 MySQL 示例,那將比 SQL 更受歡迎,因為兩者不同並且我需要使用 MySQL。

您可以像這樣使用 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;

現場演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM