У меня есть таблица
- Id (PK)
- Владелец int
- ОписаниеText text
который соединен с другой таблицей
- Id (FK)
- Участник int
Владелец может быть Участником, и если это так, то одна и та же ссылка (в таблице пользователя) принадлежит Владельцу и Участнику. Итак, я сделал:
SELECT TableA.Id,TableA.Owner,TableA.Text
FROM TableA
WHERE [email protected]
UNION
SELECT TableA.Id,TableA.Owner.TableA.Text
FROM TableA LEFT JOIN TableB ON (TableA.Id=TableB.Id)
WHERE TableB.Participant = @User
Этот запрос должен возвращать все различные наборы данных, где определенный @User является либо владельцем, либо участником, либо тем и другим.
И если бы SQL Server не бросал
Текст типа данных не может использоваться в качестве операнда для операторов UNION, INTERSECT или EXCEPT, поскольку он не сопоставим.
Так как Id - это PK, а Text - из той же таблицы, почему SQL Server вообще хочет сравнить текст?
Я могу использовать UNION ALL
, чтобы остановить повторное обнаружение, но могу ли я обойти это без потери четкости результатов?