2013-03-02 132 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