在一個查詢中我想從表X中選擇信息。 但是如果表X沒有返回任何信息,我想從表中檢索數據Y.MySQL:如果表X中的select爲空,請在表Y中選擇
彼此分開的疑問是這樣的:
SELECT * FROM tableY WHERE user_id=1
SELECT * FROM tableX WHERE id=1
我嘗試以下結合這一點,但它似乎沒有工作
SELECT * FROM tableY WHERE user_id=
IF (EXISTS (SELECT * FROM tableX WHERE id=1), 1, 0)
當然還有其他方法
SELECT * FROM tableX WHERE id=
IF (EXISTS (SELECT * FROM tableY WHERE user_id=1), 1, 0)
Bot版本將只執行第一個查詢,但不會執行第二個查詢。 所以我有點卡在這裏。
我也試過,但由於表沒有相同的行這不應該工作...和多數民衆糾正它不工作:
SELECT *
FROM orbib.billing_address
WHERE user_id=1
UNION ALL
SELECT *
FROM orbib.users
WHERE id=1
AND NOT EXISTS
(SELECT *
FROM orbib.billing_address
WHERE user_id=1
)
也試圖與一個procedure這樣做如這裏所解釋的:
然而,這並沒有幫助,除了它看起來像過程被保存,導致用戶ID始終爲1,這當然是不同的。
也許任何人都有一個想法如何創建一個查詢,做我想做的事嗎?
EDITS: 下面是表說明:
的TableX:
Field Type Null Key Default Extra
id int(11) NO PRI NULL auto_increment
username varchar(30) NO UNI NULL
firstname varchar(45) YES NULL
lastname varchar(45) YES NULL
street varchar(45) YES NULL
street_nr varchar(10) YES NULL
zipcode varchar(10) YES NULL
city varchar(45) YES NULL
password varchar(255) NO NULL
salt varchar(255) NO UNI NULL
email varchar(255) NO NULL
create_time datetime NO CURRENT_TIMESTAMP
company varchar(45) YES NULL
branche varchar(45) YES NULL
tableY:
Field Type Null Key Default Extra
id int(11) NO PRI NULL auto_increment
user_id int(11) NO NULL
company varchar(45) YES NULL
contact_name varchar(100) YES NULL
street varchar(45) YES NULL
street_nr varchar(10) YES NULL
zipcode varchar(45) YES NULL
city varchar(45) YES NULL
terms_ok tinyint(1) YES NULL
billing_ok tinyint(1) YES NULL
從觀念
所以從@kickstart我試着這樣做:
SELECT
IFNULL(tableY.company, tableX.company) company,
IFNULL(tableY.contact_name, tableX.lastname) contact,
IFNULL(tableY.street, tableX.street) street,
IFNULL(tableY.street_nr, tableX.street_nr) street_nr,
IFNULL(tableY.zipcode, tableX.zipcode) zipcode,
IFNULL(tableY.city, tableX.city) city
FROM (SELECT * FROM tableX) x
LEFT OUTER JOIN tableY ON tableY.user_id=1
LEFT OUTER JOIN tableX ON tableX.id=1
這給了我錯誤:1248每個派生表都必須有它自己的別名。 但發現解決方案,我忘了在FROM(選擇)的x
改變它後,它工作,產生兩行,但我需要改變這一點。
TNX @kickstarter
你能舉一些例子來說明你希望數據在一張表中不存在,但在另一張表中存在的例子嗎?這將有助於其他人重建問題並更好地理解問題。 – AdamMc331 2015-03-31 15:46:34
這是爲了帶回單行,還是每個表包含多行的值? – Kickstart 2015-03-31 15:49:42
Tnx這兩個響應。 @ McAdam331查看我對錶格的編輯 – BonifatiusK 2015-03-31 16:01:46