這就是你如何做到這一點 - 但最好分開查詢。
SELECT *, clients.id as client_id FROM clients_table ...
UNION SELECT settings.values, NULL, NULL, NULL... AS statuses
SELECT setting.il_values, NULL, NULL, NULL... AS currencies ...
您添加儘可能多的NULL列以使SELECT具有相同的行數。那麼你將得到:
User Email Password id
john ... ... 613
active NULL NULL NULL
dollar NULL NULL NULL
你顯然希望取回這兩個設置和貨幣和區分它們,但因爲你運行一個選擇,任何列只會有一個名。因此,第一列將被稱爲「用戶」或「設置」或「貨幣」,但從來沒有*正確的價值「
如果你想要一舉收集所有信息,你需要放棄」 *」語法和做類似:
SELECT 'userinfo' as wtf, User, Name, Email, ... FROM customers
UNION
SELECT 'setting' as wtf, value, keyname, null, ... FROM settings
UNION
SELECT 'currency' as wtf, value, null, null, ... FROM currencies
,這會給你:
wtf User Password
userinfo John whatever ...
setting 800x600 resolution NULL
setting Mozilla browser NULL
currency dollar NULL NULL
,這將讓你分不清哪個是哪個
即便如此,你不會能夠mi x可靠的數據類型(取決於您的應用DA層)。因此,如果您使用的是NUMERIC幣種的「exchange_rate」列,並且它對應於「密碼」的用戶列,則可能會發生任何情況。通常,墨菲是墨菲,這是你不想要的。爲避免這種情況,如果它成爲問題,您需要在所有沒有它的表中添加適當類型的額外列,並給它一個適當的值(NULL,或0.0,或其他) 。
這並不是失敗,因爲兩個表都有一個帶有名稱id的列,但是因爲你的'select'語句有不同數量的列,正如錯誤清楚地表明的那樣。第一個'select'有n + 1列,其中n是'clients_table'中的列數,接下來的2個'select'語句只有1列。 – TobyLL
好的謝謝,但我怎麼能解決它? –
UNION查詢必須在每個「SELECT」中具有相同數量的列。你可以在你的'SELECT'語句中添加正確數目的'NULL'列(例如'SELECT settings.values AS狀態,NULL,NULL,...',但不知道你想要達到什麼目的,不知道這是不是一個好主意。 – TobyLL