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
Odpowiedz
można przekształcić go tak:
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
Niewłaściwe użycie związku. Wszystkie tabele, które wyciągasz razem w związku, muszą mieć te same kolumny. Coś bardziej podobnego:
SELECT A, B, C FROM TUser
UNION
SELECT A, B, C FROM TUser WHERE UserId = dataUserId
Dziękuję wszystkim ... Mam rozwiązanie ze wszystkich odpowiedzi u'r – spj
To jest nieprawidłowy SQL. Wygląda na to, że próbujesz napisać coś takiego jak funkcja/procedura przechowywana.
ten sposób UNION działa (http://www.w3schools.com/SQL/sql_union.asp):
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
Oba SELECT musi mieć taką samą liczbę kolumn. Kolumny muszą również mieć podobne typy danych. Ponadto kolumny w każdej instrukcji SELECT muszą być w tej samej kolejności.
Można użyć istnieje w WHERE zamiast instrukcji IF:
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
WHERE EXISTS (SELECT columns FROM table_name3)
nie można używać wewnątrz oświadczenie if
tak, jak w union
.
Zamiast stosowania if exists
można po prostu użyć 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
Jest jedna mała różnica przy użyciu sprzężenie wewnętrzne, choć. Jeśli zdarzy ci się dopasować więcej niż jeden rekord z tabeli TUserData, to nie wyrzuci on losowo wszystkich wyników z wyjątkiem jednego jako select @dataUserId=...
, zamiast tego zwróci wynik z każdego meczu.
(Zwróć uwagę, że związek jest bezcelowy w swojej obecnej formie. Gdy otrzymasz wszystkie rekordy z tabeli w pierwszym zapytaniu, wszystko, co otrzymasz w drugim zapytaniu, będzie tylko duplikatami, ale przypuszczam, że po prostu uprościliśmy pierwsze zapytanie i że w rzeczywistości nie dostać wszystko ze stołu)
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. Przypisanie zmiennej wewnątrz IF EXISTS klauzuli
- 2. IF EXISTS w T-SQL
- 3. Jak używać instrukcji SQL Select z zapytaniem IF EXISTS?
- 4. Golang: zakres zmiennych wewnątrz instrukcji if
- 5. Serwer SQL: IF EXISTS; ELSE
- 6. Gałązka: in_array lub podobne możliwe wewnątrz instrukcji if?
- 7. CREATE TABLE IF NOT EXISTS nie z tabeli już istnieje
- 8. Dziwne zachowanie instrukcji If()
- 9. Używanie wielu let-as wewnątrz instrukcji if w Swift
- 10. Zbyt wiele instrukcji if
- 11. "Przerwa;" z instrukcji "if"?
- 12. Html.Partial nie działa pod if
- 13. Wiele instrukcji IF i instrukcji excel
- 14. Zamówienie ewaluacji w instrukcji if w JavaScript
- 15. Kierownica: wiele warunków instrukcji IF?
- 16. Kolejność wyrażeń w instrukcji if
- 17. Operator warunkowy w instrukcji if?
- 18. Możliwe potokowanie w instrukcji if?
- 19. C * może stracić aktualizacji po INSERT IF NOT EXISTS
- 20. Ocena każdej instrukcji warunkowej na bloku if ... else if ...
- 21. Serwer SQL: Czy istnieje test "IF EXISTS" dla połączonego serwera?
- 22. Porównywanie dwóch wektorów w instrukcji if
- 23. Stosując logikę wewnątrz instrukcji switch
- 24. Wykonywanie instrukcji CStr() wewnątrz instrukcji JOIN
- 25. Przeciwko pozycji "jest" w instrukcji if?
- 26. Dlaczego SQL ocenia wyciągi w prawdziwej sekcji konstruktu if, nawet jeśli `if exists` zwraca false?
- 27. IF EXISTS, a następnie wybierz ELSE INSERT, a następnie wybierz
- 28. C# za pomocą instrukcji wewnątrz #if DEBUG, ale nie wysyłam zespołu
- 29. Używanie zmiennej tabeli wewnątrz instrukcji istniejącej
- 30. Czy jest jakaś różnica między używaniem wielu instrukcji if, a innych instrukcji if?
to nie jest dozwolone, także Unia powinna mieć taką samą liczbę kolumn w obu wybranych sprawozdań – hallie
@hallie. Cóż, głównym problemem jest to, że to, co jest zgodna z dyrektywą związkową, która w ogóle nie jest oświadczeniem wybieranym. – Guffa