2013-09-05 2 views
-1

enter image description here У меня есть две таблицы, а именно: tblteacher и tblattendance. Я хочу найти учителя, который отметил посещаемость в определенную дату. Скажем, в 2013-07-02 гг. Если имя учителя существует в таблице, tblteacher он должен показывать да как статус и нет, если это не так.Запрос Mysql относительно сравнения данных между двумя таблицами

SELECT distinct tblteacher.tshortname 
    FROM tblteacher 
    LEFT JOIN tblattendance 
    ON tblteacher.tshortname = tblattendance.tshortname 
    WHERE tblattendance.attdate = '2013-07-02'; 

У меня есть общие данные о конкретной дате. Но как исправить состояние ...

ответ

0

Вы имеете в виду что-то вроде этого?

SELECT IF(t.tshortname IS NOT NULL,'yes','no') 
    FROM tblattendance AS a 
    LEFT JOIN tblteacher AS t 
    USING (tshortname) 
    WHERE a.attdate = 20130702; 
+0

я не получаю идеальный результат из него, поскольку он не показывает «нет» в строке, где данные не совпадают между двумя таблицами. Они показывают только те данные, которые присутствуют на tblattendance. – Ashish

+0

Не могли бы вы отредактировать свой вопрос, чтобы он содержал некоторые примеры данных и результат, который вы хотели бы получить? Это упростит задачу quesiton. – Mchl

+0

У меня добавлен снимок базы данных – Ashish

0

Вы должны использовать ПРАВИЛЬНОЕ СОЕДИНЕНИЕ. Как пояснил in mysql doc reference, если вы присоединитесь таблицы А и В, она по-прежнему возвращает строки из таблицы А, если нет соответствующих строк в таблице В.

SELECT t.shortname, CASE WHEN a.tshortname IS NULL THEN 'no' ELSE 'yes' END as marked_attendance 
    FROM tblteacher t 
    RIGHT JOIN tblattendance a 
    USING (tshortname) 
    WHERE a.attdate = '2013-07-02'; 
+0

Я не получаю данные, которые не лежат на tblattendance, поскольку статус «нет» – Ashish

Смежные вопросы