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

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

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

    SELECT 
    u.userId
    ,u.[Key]
    ,u.[Value]
    ,u.ReportType
    FROM
    OrderItemu 
    WHERE u.userId = 1 AND u.ReportType = 1 AND u.[Value] = '18000981'

Моя таблица:

 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

Результат, когда я использую предложение А ТАКЖЕ:

   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

Вы пробовали использовать скобки? Похоже, вы не очень хорошо знакомы с булевой логикой.

tworogue 22.03.2019 08:54

Какова цель таблицы? Я не понимаю.

Keerthivasan 22.03.2019 08:55

Все шесть строк имеют userId = 1 и reportType = 1, поэтому ваша версия ИЛИ должна была включать все 6 строк. Мне непонятно, чего вы хотите достичь с помощью сравнения u.[Value] = '18000981', похоже, вместо этого вы должны иметь AND rowId = 1

Joakim Danielson 22.03.2019 08:56

Вы можете использовать подзапрос для получения «rowId», для которого у вас есть такое значение «18000981», а затем просто получить все строки с этим «rowId» из таблицы.

tworogue 22.03.2019 08:59

да, я не очень хорошо с этим знаком, но я уже пробовал ставить скобки, но все равно не получил желаемого результата

Shiba Tatsuya 22.03.2019 09:16

эти данные загружаются в файл Excel, поэтому идентификатор строки невозможен, потому что, если у меня есть большие данные (может вызвать много строк), у них будет другой идентификатор строки. чего я хочу добиться, чтобы получить данные, используя userId и reporttype со значением OrderNumber в KeyValuePair

Shiba Tatsuya 22.03.2019 09:20
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
6
38
3

Ответы 3

SELECT u.userId ,u.[Key] ,u.[Value] ,u.ReportType FROM
OrderItem u 
WHERE u.UserId = 1 AND u.RowId = 1;

этот запрос покажет то, что вы опубликовали и хотите вернуть (это означает, что он покажет всех пользователей с ID = 1 и всех RowId = 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
)

Вам нужно использовать круглые скобки и столбцы 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'))

Другие вопросы по теме