我正在尝试从键值对中选择数据,问题是每次我使用 AND 时,它仅显示一条等于“值”列的记录 但是如果我尝试使用 OR ,则会给我错误的记录返回率。我已经进行了一些研究,但不幸的是,我还没有找到解决方案。
这就是我要尝试的:
SELECT
u.userId
,u.[Key]
,u.[Value]
,u.ReportType
FROM
OrderItemu
WHERE u.userId = 1 AND u.ReportType = 1 AND u.[Value] = '18000981'
MyTable:
OrderId UserId RowId Key Value ReportType
1 1 1 OrderNumber 18000981 1
2 1 1 Item ToyCar 1
3 1 1 Price 1000 1
4 1 2 OrderNumber 18000401 1
5 1 2 Item Camera 1
6 1 2 Price 570 1
使用 AND 子句时的结果:
OrderId UserId RowId Key Value ReportType
1 1 1 OrderNumber 18000981 1
使用 OR 子句时的结果:
OrderId UserId RowId Key Value ReportType
1 1 1 OrderNumber 18000981 1
2 1 1 Item ToyCar 1
3 1 1 Price 1000 1
4 1 2 OrderNumber 18000401 1
我想要实现的结果:
OrderId UserId RowId Key Value ReportType
1 1 1 OrderNumber 18000981 1
2 1 1 Item ToyCar 1
3 1 1 Price 1000 1
答案 0 :(得分:1)
您可以尝试使用exists
子查询。
SELECT *
FROM OrderItemu oi
WHERE exists
(
SELECT
1
FROM
OrderItemu u
WHERE u.userId = 1 AND u.ReportType = 1 AND u.[Value] = '18000981' and u.RowId = oi.RowId
)
答案 1 :(得分:0)
SELECT u.userId ,u.[Key] ,u.[Value] ,u.ReportType FROM
OrderItem u
WHERE u.UserId = 1 AND u.RowId = 1;
此查询将显示您要返回的帖子(这将显示所有ID = 1
且所有RowId
= 1的用户)
答案 2 :(得分:0)
您需要同时使用括号和key
和value
列
SELECT
u.userId
,u.[Key]
,u.[Value]
,u.ReportType
FROM
OrderItemu
WHERE u.userId = 1
AND u.ReportType = 1
AND (u.[key] = 'OrderNumber' AND u.[Value] = '18000981' OR (u.[key] <> 'OrderNumber'))