1
我需要做一些select語句獲得簡單的數據(只有一行包含一個或幾個領域每個選擇)。幾個選擇單查詢 - 即使一個選擇返回空
簡單的例子:
select name, price from article where id=125
select log, email from user where uid=241
我想只能處理一個從PHP端單個語句(或:我不想做準備幾個語句,執行多個語句,捕獲並處理異常每次執行並最終獲取每個語句的結果...)。
我想:
select * from (
(select name, price from article where id=125) as a,
(select log, email from user where uid=241) as b
)
如果每個子查詢返回的值偉大的工程:
name | price | log | email
------------------------------------------
dummy | 12,04 | john | [email protected]
但,如果子查詢的一個返回空,整個select返回空。
我想要的是:空結果子查詢的空值。
我嘗試了很多東西ifnull()
和coalesce()
,但無法得到期待的結果(我知道如何使用它們的空值,但我沒有找到一種方法來處理它們在空結果集的情況下)。
我終於找到了左的解決方案加入:
select * from (
(select 1) as thisWillNeverReturnEmpty
left join (select name, price from article where id=125) as a on 1
left join (select log, email from user where uid=241) as b on 1
)
它完美地工作,即使子查詢的一個返回空(或甚至兩者,因此「選擇1」)。
我在SO上找到的另一種方法是在每個子查詢中添加一個count(*)
以確保有價值。
但它看起來很髒,我不能相信有沒有簡單的方法只是使用像ifnull()
。 什麼是正確的做法?
你有沒有用'UNION試圖選擇... UNION SELECT ...'? –
謝謝。但是不同的查詢不需要具有相同的類型,也不需要相同數量的字段。我不太清楚,我怎麼知道哪一行屬於哪個查詢。 – fpierrat