Mr_cool Ответов: 2

Мне нужен SQL в запросе с дубликатами


Ниже приведен sql-запрос:


select  SKU,PRODUCTNAME,PRODUCTVARIANT from tbl_product where SKU  in(SELECT * FROM splitstring('ewew,slk,ewew'))



Мне нужно получить 3 строки(с дубликатом), но в запросе будет возвращено только 2 строки.

Что я могу сделать, чтобы получить 3 строки?

спасибо

Что я уже пробовал:

Прямо сейчас я получаю только 2 строки.


Функция splitstring разбивает строки на 3 строки.

Naga Sindhura

выберите артикул,Марка,PRODUCTVARIANT от tbl_product где товар В(выбрать * из STRING_SPLIT('ewew,СЛК ewew',','))
STRING_SPLIT работает только тогда, когда у вас есть SQL SERVER 2016

2 Ответов

Рейтинг:
2

Bryian Tan

Запрос, кажется, в порядке.

Можете ли вы проверить следующий запрос?

select  SKU,PRODUCTNAME,PRODUCTVARIANT from tbl_product where SKU  in ('ewew','slk')

Запрос должен выдавать три строки. Если это все еще два, это означает, что это может быть проблема с данными в таблице tbl_product. Это может быть дополнительное место на SKU или что-то в этом роде.

Если запрос возвращает 3 строки, которые могут сигнализировать о том, что функция splitstring может быть проблемой.


Mr_cool

Я не думаю, что это сработает для меня.. В любом случае спасибо

Рейтинг:
17

Richard Deeming

Использовать JOIN вместо:

select
    P.SKU,
    P.PRODUCTNAME,
    P.PRODUCTVARIANT 
from 
    tbl_product As P
    INNER JOIN splitstring('ewew,slk,ewew') As S
    ON S.VALUE = P.SKU
;

NB: Очевидно, вам нужно будет заменить S.VALUE с правильным именем столбца, возвращенным из вашего splitstring функция.


Mr_cool

Это и есть функция


Создайте функцию [dbo].[splitstring] (@stringToSplit VARCHAR (MAX) )
ВОЗВРАЩАЕТСЯ
таблица @ returnList ([Name] [nvarchar] (500))
АС
НАЧАТЬ

Объявить @name NVARCHAR(255)
Объявить @pos INT

В то время как CHARINDEX(',', @stringToSplit) > 0
НАЧАТЬ
Выберите @pos = CHARINDEX (',', @stringToSplit)
Выберите @name = SUBSTRING(@stringToSplit, 1, @pos-1)

Вставить в @returnList
выбранное имя

Выберите @stringToSplit = подстрока(@stringToSplit, @поз+1, лен(@stringToSplit)-@пос)
КОНЕЦ

Вставить в @returnList
Выберите @stringToSplit

ВЕРНУТЬ
КОНЕЦ

Richard Deeming

Итак, как я уже сказал, замените S.VALUE с S.Name.

Mr_cool

Спасибо. Работать отлично..