【发布时间】:2016-02-16 18:58:29
【问题描述】:
有桌子:
用户
id | login | password | creationDate
_____________________________________
1 | user1 | 123 | 12.12.12
2 | user2 | 123 | 12.12.12
3 | user3 | 123 | 12.12.12
附加参数
id | userId | name | value
_______________________________
1 | 1 | petName | jim
2 | 1 | houseNum| 2
3 | 1 | favTea | black
4 | 2 | favTea | black
5 | 2 | petName | jam
6 | 3 | favTea | green
7 | 3 | lang | C++
8 | 3 | petName | jem
所以,它包含差异。差异数据。用户,并且并非所有人都有相同的附加婴儿车阵列;
我的目标是选择类似的内容“选择所有拥有宠物名的用户,但前提是 favTea=black”:
结果
User.id | User.login | User.password | petName
_____________________________________________
1 | user1 | 123 | jim
2 | user2 | 123 | jam
我尝试了许多变体,但没有一个能返回我想要的。 这是我的尝试:
WITH Results_CTE AS
(
SELECT DISTINCT AdditionalParams.value,
User.id as 'id',
User.login as 'login',
User.password as 'password',
User.creationDate as 'creationDate',
AdditionalParams.value as 'pet'
FROM User
INNER JOIN AdditionalParams
ON User.id = AdditionalParams.userId
WHERE AdditionalParams.name = 'PetName' AND
AdditionalParams.value = 'black' AND
AdditionalParams.name = 'PetName' OR AdditionalParams.name = 'favTea'
)
SELECT
id as 'id',
login as 'login',
password as 'password',
status as 'status',
batchType as 'batchType',
creationDate as 'creationDate',
ExportDate as 'ExportDate',
pet as 'pet'
FROM Results_CTE
PS:数据库是 MS SQL Server 2008
【问题讨论】:
-
您的 cte 中缺少一些括号。你有 (name = 'petname' and value = 'black' and name = 'petname') OR name = 'favtea' 你为什么还要在这喝茶?看起来你只想要petName?您还使用字符串文字为所有列起别名,这有点奇怪,但别名与列名相同,那些别名毫无意义。
标签: sql sql-server database select