使用KeyValuePair选择表中的数据-SQL

时间:2019-03-22 07:51:17

标签: sql sql-server booleanquery

我正在尝试从键值对中选择数据,问题是每次我使用 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

3 个答案:

答案 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)

您需要同时使用括号和keyvalue

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'))