2017-02-16 2 views
0

Я новичок в MYSQL и хочу, чтобы он возвращал каждый из них независимо от того, существуют они или нет, однако результат не является тем, что я ожидал. Я побежал этот запрос: -Проверьте, существует ли идентификатор таблицы

SELECT product_id,code, 
    IF(EXISTS(SELECT 1 FROM product WHERE `product_id` IN ('001','002')), 1, 0) AS exist 
FROM product 
WHERE `product_id` IN ('001','002'); 

Таблица: -

product_id | code 

001 | Dark 

Мой ожидаемый результат: -

product_id | code | exist 

001 | Dark | 1 

002 |  | 0 

Результат: -

product_id | code | exist 

001 | Dark | 1 

Любая идея, как производить, как мой ожидаемый результат?

+0

Почему бы вам не сделать этот идентификатор «уникальным», поэтому он определенно не будет повторяться. –

ответ

0

MySQL дает вам правильный результат, нет записи с id = '002', поэтому он не будет включен в результат.

Оставьте логическую сделку своей программой, но не MySQL.

+0

Есть ли какой-либо возможный способ сделать это через MYSQL? – MuthaFury

+0

@MuthaFury Вам лучше понять, как работает база данных. Вы фильтруете результаты, но не расширяете результаты. Если вы хотите показать ожидаемый результат, вы должны подготовить фиктивный результирующий набор, который имеет идентификатор, указанный вами в этом состоянии. – xdazz

0

Если значения product_id, которые мы хотим вернуть в наборе результатов, не находятся в таблице product (например, '002'), нам необходимо ссылаться на источник строк, который включает значение.

Один из вариантов - использовать встроенный вид. В качестве примера:

SELECT i.product_id 
     , p.code 
     , IF(p.product_id IS NULL,0,1) AS `exist` 
    FROM ( 
      SELECT '001' AS product_id 
      UNION ALL SELECT '002' 
      UNION ALL SELECT '003' 
     ) i 
    LEFT 
    JOIN product p 
     ON p.product_id = i.product_id 
    ORDER BY i.product_id 

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

SELECT i.product_id 
     , p.code 
     , IF(p.product_id IS NULL,0,1) AS `exist` 
    FROM all_possible_product_id i 
    LEFT 
    JOIN product p 
     ON p.product_id = i.product_id 
    WHERE i.product_id IN ('001','002') 
    ORDER BY i.product_id 
Смежные вопросы