2015-05-22 2 views
3

у меня есть две таблицы, связанные через поле ID:SQL запрос, чтобы найти неиспользуемые записи

table1: идентификатор, имя, тип

table2: идентификатор, id_table1, дата, статус

Мне нужно собрать все записи table1, которые имеют определенное значение type, и не ссылаются на table2 плюс все записи table1, указанные в table2, которые имеют определенное значение поля status.

Для первой части, если я правильно помню, что я могу использовать LEFT JOIN команду:

LEFT JOIN table1.name 
LEFT JOIN table2 
     ON table2.id_table1 = table1.id 
WHERE (table1.value = 'value1') AND (table2.id_table1 IS NULL); 

но для второй части я заблудился ...

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

+1

Это немного трудно следовать вопрос, как его нынешней редакции , Можете ли вы поделиться некоторыми примерами данных и результатом, который вы пытаетесь получить для этих данных? – Mureinik

+0

Вторая часть звучит как обычная 'INNER JOIN'. Объедините их с UNION, чтобы получить оба результата. – Barmar

+0

@Barmar Вторая часть была во многом похожа на вторую часть UNION, предоставленную Cl_3518233 (чуть ниже), но по какой-то причине результирующие строки не были теми, кого я ожидал ... но я, вероятно, ожидал неправильного набора, поэтому я старался для того, чтобы запрограммировать SQL-запрос. – weirdgyn

ответ

1
SELECT t1.*, t2.* 
FROM table1 t1 
LEFT JOIN table2 t2 
    ON table2.id_table1 = table1.id 
WHERE (t1.type= 'value1' AND t2.id IS NULL) 
    OR (t2.status = 'certain status') 
1

Я думаю, вы могли бы просто изменить Где:

WHERE (table1.value = 'value1') 
    AND (table2.id_table1 IS NULL 
     OR 
     ([the other table2 status criteria) 
     ) 
; 
1

Вы можете попробовать это ...

SELECT T1.*,T2.* 
FROM Table1 T1 
LEFT JOIN Table2 T2 ON T1.Id=T2.Id_Table1 
WHERE T1.Value = 'value1' AND T2.id_table1 IS NULL 
UNION 
SELECT T1.*,T2.* 
FROM Table1 T1 
INNER JOIN Table2 T2 ON T1.Id=T2.Id_Table1 

WHERE T2.Status= 'Status Criteria' 
Смежные вопросы