Выбор данных в таблице с помощью KeyValuePair - SQL - PullRequest
0 голосов
/ 22 марта 2019

Я пытаюсь выбрать данные из пары ключ-значение, проблема в том, что каждый раз, когда я использую AND , отображается только одна запись, равная столбцу Value. но если я попытался использовать ИЛИ , это дало бы мне неправильный возврат записи. Я уже провел некоторые исследования, но, к сожалению, я даже близко не могу найти решение.

Вот что я пытаюсь:

    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

Результат при использовании предложения ИЛИ :

 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 ]

1 голос
/ 22 марта 2019

Вы можете попробовать использовать 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
)
0 голосов
/ 22 марта 2019

Вам необходимо использовать скобки и оба столбца 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'))
0 голосов
/ 22 марта 2019
SELECT u.userId ,u.[Key] ,u.[Value] ,u.ReportType FROM
OrderItem u 
WHERE u.UserId = 1 AND u.RowId = 1;

этот запрос покажет, что вы опубликовали, что вы хотите вернуть (то есть он покажет всем пользователям с ID = 1 и всем RowId = 1 aswell)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...