【发布时间】:2016-04-26 03:49:21
【问题描述】:
我有一张桌子
- 标识(PK)
- 所有者解释
- 描述文本文本
连接到另一个表
- Id (FK)
- 参与者介绍
所有者可以是参与者,如果是,那么所有者和参与者中的相同引用(到用户表中)。所以我做了:
SELECT TableA.Id,TableA.Owner,TableA.Text
FROM TableA
WHERE TableA.Owner=@User
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 为什么要比较 Text 呢?
我可以使用UNION ALL 来停止重复检测,但是我可以在不丢失结果的独特性的情况下绕过它吗?
【问题讨论】:
-
嘿,您的数据集是否不同?一张桌子只有一个所有者,并且只注册为参与者一次?
标签: sql sql-server tsql union