SQL LIKE условие работы с результатом из другого запроса - PullRequest
1 голос
/ 09 марта 2011

Делает что-то вроде этой работы

SELECT color
FROM rawdata 
WHERE color LIKE (
    SELECT TOP 1 color_condition 
    FROM rules
    WHERE rules_id=1
)

Если бы color_condition правила 1 было B%, это вернуло бы запись из необработанных данных, где color = 'Blue'?

Ответы [ 2 ]

1 голос
/ 09 марта 2011

Да.

По крайней мере в SQL Server это происходит, и похоже, что вы используете это из TOP

WITH rawdata(color) As
(
SELECT 'Blue' UNION ALL SELECT 'Red'
), rules(color_condition,rules_id) AS
(
SELECT 'B%',1
)
SELECT color FROM rawdata 
WHERE color LIKE (SELECT TOP 1 color_condition 
                  FROM rules WHERE rules_id=1)

Возвращает

color
-----
Blue
0 голосов
/ 09 марта 2011

Ответ на вопрос «да», но мне интересно, вызывает ли ваше сомнение именно ваша конкретная конструкция SQL.Лично я предпочитаю не видеть предикат, прерванный подзапросом.Посмотрите, не проще ли это прочитать:

SELECT D1.color 
  FROM rawdata AS D1
 WHERE EXISTS (
               SELECT * 
                 FROM rules AS R1
                WHERE D1.color LIKE R1.color_condition 
                      AND R1.rules_id = 1
              );
...