У меня есть одна таблица (скажем, table1) и имеет значения в поле «Имя», такие как: «Меня зовут Викаш», «Меня зовут VGH», «У меня есть hjk», а вторая таблица (скажем, table2) имеет значения в «Имя» поле типа: «Мой», «имя». И результат мне нужен «Меня зовут Викаш» и «Меня зовут VGH»

Я пытался проверить значения из первой таблицы, если она содержит все значения из второй таблицы путем сравнения, но LIKE сравнивает только одно значение. Мне нужна функция сравнения нескольких значений

Select  table1.Name from table1
where table1.Name Like(Select Name from Table2)

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

1
Vikash Kumar 2 Май 2019 в 10:21

4 ответа

Лучший ответ

Вы можете попытаться посчитать совпадения, используя CROSS APPLY:

Вход:

CREATE TABLE #Table1 (
   [name] nvarchar(max)
)
CREATE TABLE #Table2 (
   [name] nvarchar(100)
)

INSERT INTO #Table1
   ([name])
VALUES
   ('My name is Vikash'),
   ('My name is VGH'),
   ('My name is VG3'),
   ('My name is VG4'),
   ('I have hjk')
INSERT INTO #Table2
   ([name])
VALUES
   ('My'),
   ('name'),
   ('VGH')

T-SQL (для частичного совпадения):

SELECT t1.[name]
FROM #Table1 t1
CROSS APPLY #Table2 t2
GROUP BY t1.[name]
HAVING SUM(CASE WHEN (t1.[name] LIKE '%' + t2.[name] + '%') THEN 1 ELSE 0 END) > 0

Выход:

------------------
name
------------------
My name is VG3
My name is VG4
My name is VGH
My name is Vikash

T-SQL (для полного соответствия):

SELECT t1.[name]
FROM #Table1 t1
CROSS APPLY #Table2 t2
GROUP BY t1.[name]
HAVING SUM(CASE WHEN (t1.[name] LIKE '%' + t2.[name] + '%') THEN 1 ELSE 0 END) = (SELECT COUNT(*) FROM #Table2)

Выход:

------------------
name
------------------
My name is VGH
3
Zhorov 2 Май 2019 в 08:48

Как насчет этого? Выберите отдельные имена из tbl1 и используйте JOIN в tbl2, используя LIKE. Мы должны использовать Distinct, так как в противном случае вы получили бы несколько результатов из одних и тех же значений в tbl1 (поскольку значения My и Name совпадают).

SELECT DISTINCT t1.name
FROM tbl1 t1
JOIN tbl2 t2
  ON t1.name LIKE CONCAT('%', t2.name, '%')
1
Qirel 2 Май 2019 в 07:49

Я думаю, что вы ищете что-то вроде:

SELECT DISTINCT T1.Name FROM table1 AS T1
INNER JOIN table2 AS T2
ON T1.Name LIKE CONCAT("%", T2.Name, "%");
1
MarcM 2 Май 2019 в 08:01

Это даст ожидаемые результаты, я думаю. Пожалуйста, просто игнорируйте столбец RN из вашего окончательного набора результатов.

SELECT DISTINCT A.Name,A.RN 
FROM
(
    SELECT 
    'A' AS COMMON,
    Name,
    RANK() OVER(PARTITION BY Name ORDER BY Name) RN
    FROM Table1
)A
INNER JOIN 
(   
    SELECT 
    'A' AS COMMON,
    Name 
    FROM table2
)B
ON A.Common = B.Common
WHERE CHARINDEX(B.Name,A.Name,0) > 0
1
mkRabbani 2 Май 2019 в 08:08