我有一個表,其中包含某些 ID,以及針對它們的值。如果我在 where 子句中傳遞一個 ID 串列,它將只回傳匹配的 ID,并丟棄其余的。我怎樣才能獲得不匹配的 ID,它們也具有空值。
桌子:
select * from members;
結果:
|member_id |price |
-------------- -------
| 0 |1234 |
| 1 |99 |
-------------- -------
但是,如果我們運行此查詢,它不會回傳不匹配的值。
select member_id,price from members where member_id in (0,1,2,3)
如何也顯示 ID 2&3,但價格列對它們為空?
謝謝!
uj5u.com熱心網友回復:
值不能僅出現在where子句中;它們必須以某種方式出現在from子句中。您必須創建包含這些值的某種視圖。一種常見的方法是使用 Oracle 提供的集合型別并從中進行選擇,如下所示:
select t.column_value as member_id, m.price
from sys.odcinumberlist(0, 1, 2, 3) t left outer join members m
on t.column_value = m.member_id
;
MEMBER_ID PRICE
---------- ----------
0 1234
1 99
2
3
odcinumberlist是包中定義的集合資料型別 ( varray of number) sys,由 Oracle 提供。在陳述句的from子句中使用時select,這些值位于名為 的列中column_value。
這是否適用于“mariadb”(無論是什么),您都必須嘗試看看。如果沒有,您可以嘗試更傳統的方法,例如
select t.member_id, m.price
from (
select 0 as member_id from dual union all
select 1 from dual union all
select 2 from dual union all
select 3 from dual
) t
left outer join members m on t.member_id = m.member_id
;
uj5u.com熱心網友回復:
您可以為此使用 LEFT JOIN:
SELECT m.member_id, m.price
FROM members m
LEFT JOIN members m2 ON m2.member_id = m.member_id
AND m2.member_id IN (0,1,2,3)
WHERE m2.member_id IS NULL
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/504041.html
上一篇:'Future<QuerySnapshot<Map<String,dynamic>>>'型別的值不能分配給'QuerySnapshot
