2015-09-11 9 views
1

Я пытаюсь создать представление из 3 таблиц. Есть одна строка, которая испортила все, и я не могу понять это правильно. Его в заявлении «IF» ниже. Я знаю, что не могу использовать WHERE внутри оператора if, но этого я и пытаюсь достичь.MySQL WHERE in IF Statement of View

Таблица 'c' (таблица qms_dpus) представляет собой таблицу, в которой хранятся ОШИБКИ для каждого задания. То, что я пытаюсь сделать, это сказать:

«для каждого задания, которое находится внутри таблицы« a », проверьте таблицу« c », чтобы увидеть, соответствуют ли столбцы JOBNUM и столбцу IS_COMPLETE равен 0. Если это правда, 1 в новой колонке OPEN_DPUS. Если оно ложно, то поставить 0 в колонке»

CREATE OR REPLACE VIEW `view_qms_linea` AS SELECT 
    a.ID AS `ID`, 
    a.JID AS `JID`, 
    b.HPL AS `HPL`, 
    b.LINE AS `LINE`, 
    a.PAREA AS `PRODAREA`, 
    a.JOBNUM AS `JOBNUM`, 
    b.MODELNUMBER AS `MODELNUMBER`, 
    b.CUSTOMER AS `CUSTOMER`, 
    b.PM_AE AS `PM_AE`, 
    b.PM_PE AS `PM_PE`, 
    b.PM_DE AS `PM_DE`, 
    b.PM_EE AS `PM_EE`, 
    b.PM_ED AS `PM_ED`, 
    b.PM_CE AS `PM_CE`, 
    IF(c.IS_COMPLETE=0 WHERE c.JOBNUM LIKE a.JOBNUM, 1, 0) AS `OPEN_DPUS` 

FROM `gen_jobs_in_production` a, `gen_jobs_table` b, `qms_dpus` c 

WHERE 
    a.JOBNUM LIKE b.WO 
AND 
    b.LINE = 1 
AND 
    a.PAREA != 4 
AND 
    a.PAREA <= 7; 

Когда я удалить оператор IF (и ссылки на таблицы„C“) код прекрасно работает и обеспечивает мне нужно то, что мне нужно, за исключением колонки OPEN_DPUS, но если я заменил оператор IF следующим образом:

IF(c.JOBNUM LIKE a.JOBNUM AND c.IS_COMPLETE=0,1,0) AS `OPEN_DPUS` 

Мое мнение предоставляет мне все данные, но вместо 12 записей (в настоящее время), он повторяет каждую запись 12 раз и бесконечно повторяет этот рисунок.

Я хотел бы показать свою структуру таблицы, но у меня есть много столбцов и только сделало бы это более запутанным ...

Любая помощь будет принята с благодарностью!

ответ

2

Ваш запрос отсутствовал join условия. Поэтому он возвращал вам крест, объединенный результатами трех таблиц в вашем запросе. Попробуйте выполнить запрос ниже.

CREATE OR REPLACE VIEW `view_qms_linea` AS SELECT 
a.ID AS `ID`, 
a.JID AS `JID`, 
b.HPL AS `HPL`, 
b.LINE AS `LINE`, 
a.PAREA AS `PRODAREA`, 
a.JOBNUM AS `JOBNUM`, 
b.MODELNUMBER AS `MODELNUMBER`, 
b.CUSTOMER AS `CUSTOMER`, 
b.PM_AE AS `PM_AE`, 
b.PM_PE AS `PM_PE`, 
b.PM_DE AS `PM_DE`, 
b.PM_EE AS `PM_EE`, 
b.PM_ED AS `PM_ED`, 
b.PM_CE AS `PM_CE`, 
--change from here 
IF(c.IS_COMPLETE = 0, 1, 0) AS `OPEN_DPUS` 
FROM `gen_jobs_in_production` a 
JOIN `gen_jobs_table` b ON a.JOBNUM = b.WO 
JOIN `qms_dpus` c ON c.jobnum = a.jobnum 
WHERE b.LINE = 1 
AND a.PAREA != 4 
AND a.PAREA <= 7; 
+0

На самом деле. мой взгляд отображается пустым ... – Sanya

+0

Вы правы, чтобы использовать JOIN, хотя ... возможно, что-то с моей структурой (я не ссылаюсь на правильные столбцы). – Sanya

+1

'join' на таблицах' a' и 'b' следует пересмотреть. –