SQL-запрос для получения всех записей из одной таблицы, кроме определенной записи, по дате, из другой таблицы - PullRequest
0 голосов
/ 08 февраля 2012

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

Table1 T1id, firstName, LastName
Table2 id, T1id, hours, rate, date

T1id является связующим звеном между двумя таблицами, поэтому при объединении таблиц у меня будет T1id, firstName, lastName, hours, rate, date

Допустим, в Table2 есть запись с date от 2012-02-08.В одном запросе мне нужно выбрать все записи из Table1 , , исключая запись из Table2 с датой 2012-02-08 .

Я пробовал несколько вариантов JOINS и UNIONS, однако я либо получаю все записи, кучу дублированных записей, либо одну запись (например, дату таблицы 2).Я прошу прощения, но у меня нет конкретного фрагмента кода для включения, так как у меня ничего не работает.

Ответы [ 2 ]

1 голос
/ 08 февраля 2012

Очень часто это обычно делается с подзапросом NOT EXISTS, но подзапросы могут сильно повлиять на производительность в больших таблицах ... Однако выполнение LEFT JOIN и поиск NULL по сути, тот же результат

select
      t1.*
   from
      table1 t1
         left join table2 t2
            on t1.t2.t1id
          AND t2.date = '2012-02-08'
   where
      t2.t1id IS NULL
1 голос
/ 08 февраля 2012

USE INNER JOIN, если вы уверены, что T1id существует в обеих таблицах:

SELECT  a.T1id, 
        a.FirstName, 
        a.LastName, 
        b.hours, 
        b.rate, 
        b.date
FROM table1 a INNER JOIN table2 b
        ON a.T1id = b.T1id
WHERE b.date <> DATE('2012-02-08')

, но если вы хотите получить все T1id из Table1 (которая существует или не существует вTable2 ) использование LEFT JOIN

SELECT  a.T1id, 
        a.FirstName, 
        a.LastName, 
        b.hours, 
        b.rate, 
        b.date
FROM table1 a LEFT JOIN table2 b
        ON a.T1id = b.T1id
WHERE b.date <> DATE('2012-02-08')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...