Исправьте ошибку, вызванную небулевым типом, указанным в контексте, где ожидается условие, рядом с ',' - PullRequest
1 голос
/ 28 января 2020

Выражение не булева типа, указанное в контексте, где ожидается условие, рядом с ','.

SELECT *
FROM product
WHERE (description, price) IN (SELECT description, price FROM product
                               WHERE name = 'Colgate Active Salt');

Привет всем, просто пытаюсь работать с подзапросом из нескольких столбцов, который всплывает с Выше ошибки, тот же код, кажется, прекрасно работает с oracle, но не с MS SQL.

Решения, пожалуйста.

Ответы [ 2 ]

1 голос
/ 28 января 2020

SQL Сервер не поддерживает этот синтаксис кортежа (который, однако, поддерживается в других базах данных, таких как MySQL). В качестве обходного пути вы можете использовать предложение EXISTS:

SELECT *
FROM product p1
WHERE EXISTS
    (SELECT 1 FROM product p2 WHERE p2.description = p1.description AND
                                    p2.price = p1.price AND
                                    p2.name = 'Colgate Active Salt');
1 голос
/ 28 января 2020

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

Select a.name, a.description from product 
where name = 'Colgate Active Salt'

В качестве вопроса вы должны использовать IN, как показано здесь .

Другой способ должен использовать inner join для извлечения записей, которые имеют те же description и price, что и Colgate Active Salt.

SELECT a.*
FROM (
    SELECT *
    FROM product
    WHERE name = 'Colgate Active Salt'
    ) a
INNER JOIN (
    SELECT *
    FROM product
    ) b ON a.description = b.description
    AND a.price = b.price
    -- AND a.name = b.name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...