Мне нужно сделать пересечение и получить общее variantID
; из списка пар параметров (optionID,valueID)
.
Пример: для данного списка, в котором есть 2 элемента:
- optionID = 16 и valueID = 1
- optionID = 17 и valueID = 4
Я написал ниже запросы вручную:
select *
from tbl_VariantValues
where optionID = 16 and valueID = 1 and productID = 399
select *
from tbl_VariantValues
where optionID = 17 and valueID = 4 and productID = 399
Я получаю следующие результаты:
productID variantID optionID valueID
---------------------------------------
399 11 16 1
399 12 16 1
399 13 16 1
399 14 16 1
399 15 16 1
productID variantID optionID valueID
---------------------------------------
399 13 17 4
399 19 17 4
Так как мне нужно только variantID
, с пересечением:
select variantID
from tbl_VariantValues
where optionID = 16
and valueID = 1
and productID = 319
intersect
select variantID
from tbl_VariantValues
where optionID = 17
and valueID = 4
and productID = 319
Я получаю желаемый результат variantID: 13
Проблема в том, что я хочу выполнить вышеуказанный запрос программно, так как в списке tvp
может быть больше элементов. Является ли это возможным?
Я попытался написать ниже запрос, но не знаю, где и как поставить пересечение:
create procedure [dbo].[getVariantID]
(@list OptionValueList readonly)
as
begin
declare @UseTVP int
set @UseTVP = (select count(*) from @list)
select variantID
from dbo.tbl_VariantValues
where (optionID = (select C.OptionID from @list C)
and valueID = (select C.OptionID, C.ValueID from @list C)
or @UseTVP = 0)
intersect
end
@UseTVP
- это количество элементов tvp, мне нужна логика использования пересечения здесь для объединения таблиц. Или есть другой способ сделать это?
optionID
,valueID
иproductID
в качестве входных параметров внутри вашей хранимой процедуры? - person Masoud Keshavarz   schedule 20.04.2019tvp
будет n строк, будет n разных парoptionID
,valueID
для создания предложений where; Это означает, что запросов на выборку в sp будет n штук, и нужно поместитьintersect
между ними, чтобы получитьvariantID
. Но запустить не смог. у меня синтаксическая ошибка.. - person Zeynep   schedule 20.04.2019@UseTVP is the count of the tvp items, I need a logic of intersect usage here to merge the tables.
Как вы упомянули в своем вопросе, @UseTVP — это целое число, которое содержит количество записей tvp. Но что вы подразумеваете под «объединить таблицы»? Вы пытаетесь объединить результат с чем? Что вы имеете в виду под этой строкой:valueID=(SELECT C.OptionID, C.ValueID FROM @list C) OR @UseTVP = 0)
Совершенно непонятно - person Masoud Keshavarz   schedule 20.04.2019@list
сtbl_VariantValues
? Является ли @Squirrel ответом на то, что вы ищете? - person Masoud Keshavarz   schedule 20.04.2019