Я пытаюсь выбрать данные из пары ключ-значение, проблема заключается в том, что каждый раз, когда я использую А ТАКЖЕ, отображается только одна запись, равная столбцу 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
Какова цель таблицы? Я не понимаю.
Все шесть строк имеют userId = 1 и reportType = 1, поэтому ваша версия ИЛИ должна была включать все 6 строк. Мне непонятно, чего вы хотите достичь с помощью сравнения u.[Value] = '18000981', похоже, вместо этого вы должны иметь AND rowId = 1
Вы можете использовать подзапрос для получения «rowId», для которого у вас есть такое значение «18000981», а затем просто получить все строки с этим «rowId» из таблицы.
да, я не очень хорошо с этим знаком, но я уже пробовал ставить скобки, но все равно не получил желаемого результата
эти данные загружаются в файл Excel, поэтому идентификатор строки невозможен, потому что, если у меня есть большие данные (может вызвать много строк), у них будет другой идентификатор строки. чего я хочу добиться, чтобы получить данные, используя userId и reporttype со значением OrderNumber в KeyValuePair
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'))
Вы пробовали использовать скобки? Похоже, вы не очень хорошо знакомы с булевой логикой.