2013-03-02 101 views
1

這是我的UNION ALL查詢,但它不會工作,我不知道爲什麼,這似乎是正確的UNION查詢不起作用

 SELECT 
       ID AS IDzivotinja, zivotinja 
       FROM zivotinje WHERE IDveterinar=$ID 
     UNION ALL 
     SELECT 
       ID AS IDsimptom, simptom 
       FROM simptomi WHERE IDveterinar=$ID 
     UNION ALL 
     SELECT 
       ID AS IDterminza, terminza 
       FROM termniniza WHERE IDveterinar=$ID 
+2

你是什麼意思不起作用?你有錯誤嗎?你期望從查詢中得到什麼? – Taryn 2013-03-02 14:02:33

+0

爲什麼在最後2次查詢中編寫了「ID AS IDsimptom」和「ID AS IDterminza」?它沒有意義。結果集中的列名將是'IDzivotinja','zivotnija',因爲那就是UNION的工作方式。 – Kamil 2013-03-02 14:27:40

+0

我現在看到,現在我添加了「... AS IDzivotinja」和「... AS ziv」,但它仍然不起作用 – FosAvance 2013-03-02 14:30:34

回答

1

列必須相互匹配。

SELECT ID, zivotinja as ColName, 'zivotinje' tableName 
FROM zivotinje 
WHERE IDveterinar=$ID 
UNION ALL 
SELECT ID, simptom as ColName, 'simptomi' tableName 
FROM simptomi 
WHERE IDveterinar=$ID 
UNION ALL 
SELECT ID, terminza as ColName, 'termniniza' tableName 
FROM termniniza 
WHERE IDveterinar=$ID 

一件事,這是隻是一種猜測

如果列zivotinjasimptomterminza僅僅是用戶定義的值(和它的目的是用來定義哪裏是價值從附帶的表),那麼你需要用單引號把它包起來。

SELECT ID, 'zivotinja' as ColName 
FROM zivotinje 
WHERE IDveterinar=$ID 
UNION ALL 
SELECT ID, 'simptom' as ColName 
FROM simptomi 
WHERE IDveterinar=$ID 
UNION ALL 
SELECT ID, 'terminza' as ColName 
FROM termniniza 
WHERE IDveterinar=$ID 
+0

我正在選擇列,而不是用戶定義值 – FosAvance 2013-03-02 14:25:11

+0

如果是這種情況,請執行第一個查詢。 *後續問題*,「IDveterinar」列的數據類型是什麼? – 2013-03-02 14:26:04

+0

它是INT,ID是INT和其他是varchar – FosAvance 2013-03-02 14:31:31

1

請注意,在聯盟內每個SELECT語句必須有相同數量的列。這些列也必須具有相似的數據類型。另外,每個SELECT語句中的列必須以相同的順序排列。以下SQL查詢應該可以工作。請嘗試。

編輯:如果相應的列不具有相同的數據類型,你可以將它們轉換成相同的數據類型如下:

SELECT 
     ID AS IDzivotinja, CAST(zivotinja AS CHAR) AS Col2 
     FROM zivotinje WHERE IDveterinar=$ID 
UNION ALL 
SELECT 
     ID AS IDzivotinja, CAST(simptom AS CHAR) AS Col2 
     FROM simptomi WHERE IDveterinar=$ID 
UNION ALL 
SELECT 
     ID AS IDzivotinja, CAST(terminza AS CHAR) AS Col2 
     FROM termniniza WHERE IDveterinar=$ID 
+0

nop,它不起作用 – FosAvance 2013-03-02 14:27:21

+0

什麼是zivotinja,simptom和terminza的數據類型?如果它們有不同的數據類型,請將它們轉換爲相同的數據類型以獲得您想要的結果。 – Agilox 2013-03-02 14:29:50

+0

它們都是VARCHAR – FosAvance 2013-03-02 14:35:32