SELECT A, B, C FROM TUser
UNION
IF EXISTS(SELECT dataUserId FROM TUserData WHERE DataId = @dataId AND UserId = @userId)
BEGIN
SELECT @dataUserId = dataUserId FROM TUserData WHERE DataId = @dataId AND UserId = @userId
SELECT A, B, C FROM TUser WHERE UserId = dataUserId
END
ответ
Вы можете преобразовать его так:
SELECT @dataUserId = dataUserId FROM TUserData
WHERE DataId = @dataId AND UserId = @userId
IF (@dataUserId IS NOT NULL)
BEGIN
SELECT A, B, C FROM TUser
UNION
SELECT A, B, C FROM TUser WHERE UserId = @dataUserId
END
ELSE
SELECT A, B, C FROM TUser
Неверное использование союза. Все таблицы, которые вы объединяете в союзе, должны иметь одинаковые столбцы. Что-то еще:
SELECT A, B, C FROM TUser
UNION
SELECT A, B, C FROM TUser WHERE UserId = dataUserId
Спасибо всем ... Я получил решение от всех ответов u'r – spj
Это недопустимый SQL. Похоже, вы пытаетесь написать что-то вроде функции/хранимой процедуры.
Это как работает UNION (http://www.w3schools.com/SQL/sql_union.asp):
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
Оба ЗЕЬЕСТ должны иметь одинаковое число столбцов. Столбцы также должны иметь похожие типы данных. Кроме того, столбцы в каждой инструкции SELECT должны быть в том же порядке.
Вы можете использовать существует в ИНЕКЕ вместо инструкции IF:
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
WHERE EXISTS (SELECT columns FROM table_name3)
Вы не можете использовать if
заявление внутри a union
вот так.
Вместо использования if exists
вы можете просто использовать inner join
:
select A, B, C from TUser
union
select u.A, u.B, u.C from TUser u
inner join TUserData t on t.dataUserId = u.UserId
where t.DataId = @dataId and t.UserId = @userId
Существует одна небольшая разница при использовании внутреннего соединения, однако. Если вы столкнулись с более чем одной записью из таблицы TUserData, она не будет случайным образом выбрасывать все результаты, кроме одного, как select @dataUserId=...
, а вместо этого вернет результат из каждого совпадения.
(Обратите внимание, что объединение не имеет смысла в текущей форме. Когда вы получите все записи из таблицы в первом запросе, все, что вы получите во втором запросе, будет только дублированием, но я полагаю, что вы просто упростили первый запрос, и что это на самом деле не получить все из таблицы)
SELECT A, B, C
FROM TUser
UNION
SELECT u.A, u.B, u.C
FROM TUser AS u
JOIN TUserData AS d ON u.UserId = d.dataUserId
WHERE d.UserId = @userId
AND d.DataId = @dataId
- 1. Использование «UNION» с «IF EXISTS»
- 2. Если Exists заявление не работает
- 3. IF EXISTS не работает
- 4. Почему IF EXISTS не работает?
- 5. MySQL IF EXISTS не работает
- 6. SQL-IF EXISTS не работает
- 7. Заявление if не работает
- 8. Union и If Exists - не работают вместе - Пожалуйста, помогите
- 9. SQL-запрос IF EXISTS не работает
- 10. IF EXISTS SQL Statement не работает
- 11. IF NOT EXISTS не кажется, работает
- 12. T-SQL NOT IN работает, но NOT EXISTS не
- 13. Вставить заявление в IF EXISTS, используя другие данные
- 14. JOIN vs. IN vs. EXISTS
- 15. Union Select in PDO не работает
- 16. Проблем с IF EXISTS()
- 17. MySQL IF ... ELSE или IF EXISTS заявления
- 18. IF NOT EXISTS ... не работает, и понятия не имею, почему
- 19. if заявление в макрос не работает
- 20. SQL IF EXISTS Команда
- 21. SQL оптимизируют IF EXISTS
- 22. MySQL: IF EXISTS ... TRUNCATE
- 23. Drop view if exists
- 24. SQL запрос IF EXISTS
- 25. SAS: keep if exists
- 26. Заявление IF не работает. Пакетные файлы
- 27. Ruby IF или заявление не работает
- 28. java if заявление текст приглашение не работает
- 29. Заявление ELSE/IF не работает правильно
- 30. Почему мое заявление «else if» не работает?
это не разрешено, а также объединение должны иметь одинаковое число столбцов на обоих выбранных утверждений – hallie
@hallie:. Ну, главная проблема в том, что следует, что директива union - это вовсе не оператор выбора. – Guffa