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

+0

Почему вы написали «ID ID ID» и «ID AS IDterminza» в последних двух запросах? Это не имеет смысла. Имена столбцов в наборе результатов будут 'IDzivotinja',' zivotnija', потому что это как работает UNION. – Kamil

+0

Я вижу, что теперь, теперь я добавил «... AS IDzivotinja» и «... AS ziv», но он все еще не работает – FosAvance

ответ

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 

еще одна вещь, это только предположение.

Если столбцы zivotinja, simptom, terminza только пользователь определяет значение (и цель его использовать, чтобы определить, где находится таблица, что значение пришло из), то вам нужно обернуть его в одинарных кавычках.

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

+0

, если это так, возьмите первый запрос. * вопрос о последующем вопросе *, каков тип данных столбца 'IDveterinar'? –

+0

Это INT, ID - INT, а другой - varchar. – FosAvance

1

Пожалуйста, обратите внимание, что каждый оператор SELECT, в UNION должны иметь такое же количество столбцов. Столбцы также должны иметь похожие типы данных. Кроме того, столбцы в каждой инструкции SELECT должны быть в одном порядке. Следующий SQL-запрос должен работать. Попробуйте.

Edit: Если соответствующие столбцы не имеют такой же тип данных, вы можете конвертировать их в тот же тип данных следующим образом:

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, It does not work – FosAvance

+0

Что такое типы данных зивотинья, симптом и терминация? Если у них разные типы данных, пожалуйста, бросьте их в один и тот же тип данных, чтобы получить желаемый результат. – Agilox

+0

все они VARCHAR – FosAvance

Смежные вопросы