2015-03-02 21 views
1

Мне нужна помощь по моему запросу.Mysql Получить строки, которые еще не используются

Мне нужно выбрать данные, которые не выбраны в другом запросе.

Так что среднее значение:
Таблица 1 имеют 50 Вопросы
Таблица 2 выбранные 32
Есть еще 18 не используется.
Мне нужно только выбрать 18 вопросов, которые не используются.

Надеюсь, вы можете мне помочь!

Edit:
Таблица со всеми Вопросы:
Id - InputType - InputName - InputLabel

Таблица с выбранными вопросами:
Id - требуется - позиция

отношений: Id с Ид

+0

Какова структура вашей таблицы? –

+0

А какова связь между таблицами? –

+0

Взгляните на инструкцию EXCEPT. Возможно, это то, что вы ищете. https://msdn.microsoft.com/en-us/library/ms188055.aspx – Veverke

ответ

2

Вы можете использовать LEFT JOIN:

SELECT T1.* 
FROM Table1 T1 LEFT JOIN 
    Table2 T2 ON T1.Id=T2.Id 
WHERE T2.required IS NULL 

Объяснение:

Когда мы объединяем эти таблицы с LEFT JOIN, он будет выбрать все записи из Table1 и соответствующие записи из Table2 (если таковые имеются). И мы исключаем вопросы, которые уже приведены в таблице 2.

Рассмотрим данные таблицы:

Table1      Table2 
-------------------------------------------------- 
id Question    id  Question 
1  Question1    1  Question1 
2  Question2    3  Question3 
3  Question3    5  Question5 
4  Question4    
5  Question5    
6  Question6    

Тогда этот запрос приведет:

id Question 
-----------------     
2  Question2     
4  Question4 
6  Question6     
+0

Только 1 небольшая проблема. Теперь он получает только тот вопрос, который выбран. поэтому я должен повернуть его или что-то в этом роде. –

+0

@MathieuP: Это потому, что вы потеряли имена таблиц. Просто измени его. Таблица 1 должна быть таблицей с полными вопросами. Или вы можете использовать 'RIGHT JOIN' без изменения имен. Оба будут работать. –

+0

Ehm .. это не работает мной ... я пробовал это .. –

0

Из вашего утверждения, похоже, что используемые вопросы хранятся в другой таблице Table2. Так что это будет что-то типа;

Select * From Table1 A 
Left Join Table2 B On A.QuestionID = B.QuestionID 
Where B.QuestionID is Null 
1
SELECT 
    aq.* 
FROM 
all_questions aq 
LEFT JOIN selected_questions sq ON sq.Id = aq.Id 
WHERE sq.Id IS NULL 
0

Вы можете использовать Except

выбрать те вопросы, в первой таблице, но не во второй Таблица

select QuiestionID from Questions 
except 
select QuiestionID from SelectedQuestions 
0

Окончательный ответ, что я сделал со всеми вашими ответами.

SELECT fbb.* 
FROM formbuildingblock fbb 
LEFT JOIN formbbformtemplate fbbft 
ON fbbft.formBuildingBlockId = fbb.formBuildingBlockId 
WHERE fbbft.formBuildingBlockId IS NULL; 
Смежные вопросы