一千萬個為什麽

搜索

將一個表的查詢結果與另一個表的默認值相結合


這是真實表格數據的一個愚蠢版本,所以可能看起來有點傻。

表1(用戶):

id INT
username TEXT
favourite_food TEXT
food_pref_id INT

表2(food_preferences):

id INT
food_type TEXT

邏輯如下:

假設我的食物偏好表中有這個:

1, 'VEGETARIAN'

這在users表中:

1, 'John', NULL, 1
2, 'Pete', 'Curry', 1

在這種情況下,約翰默認是素食主義者,但皮特應該表現為喜歡咖喱的人。

問題,有沒有辦法將查詢合並到一個select語句中,這樣如果favourite_food列為NULL,它將從首選項表中獲取默認值?

我顯然可以在應用程序邏輯中執行此操作,但如果可能的話,將其卸載到SQL會很好。

DB是SQLite3 ......

最佳答案

您可以使用 COALESCE(X,Y,...) 選擇非NULL的第一個項目。

如果你將它與內部聯接結合起來,你應該可以做到你想要什麽。

它應該是這樣的:

SELECT u.id AS id,
       u.username AS username,
       COALESCE(u.favorite_food, p.food_type) AS favorite_food,
       u.food_pref_id AS food_pref_id
FROM users AS u INNER JOIN food_preferences AS p
  ON u.food_pref_id = p.id

但是,我沒有方便測試的SQLite數據庫,因此語法可能不是100%正確,但它是它的要點。

轉載註明原文: 將一個表的查詢結果與另一個表的默認值相結合

猜你喜歡