Сравните с датой и проблемой ID - PullRequest
0 голосов
/ 06 октября 2009

Table1

ID Date Intime Outtime

A001   20000501 12:00:00 22:00:00
A001   20000502 14:00:00 22:00:00
A001   20000503 12:00:00 23:00:00
A002   20000501 11:00:00 20:00:00
A002   20000502 13:00:00 21:00:00

Итак ...,

Table2

ID Date Intime Outtime

A001 20050501 14:00:00 23:00:00
A002 20050501 08:00:00 16:00:00

Из таблицы выше

Я хочу взять Table1.ID, Table1.Date, Table2.Intime, Table2.Outtime из внутреннего соединения Table1 Table2 на Table1.ID = Table2.ID и Table1.Date = Table2.Date

Получение дублированных значений

ID Date Intime Outtime

A001   20000501 14:00:00 23:00:00
A001   20000501 18:00:00 16:00:00
A002   20000501 14:00:00 23:00:00
A002   20000501 18:00:00 16:00:00

Я также пытался использовать левое внешнее соединение. Это было то же самое. Как сравнить идентификатор и дату.

Нужна справка?

1 Ответ

1 голос
/ 06 октября 2009

Если вы выполните внутреннее объединение, вы получите только те строки, которые присутствуют в обеих таблицах (с точки зрения их идентификатора и даты):

SELECT 
  Table1.ID, Table1.Date, 
  Table2.Intime, Table2.Outtime 
FROM Table1 
INNER JOIN Table2 ON Table1.ID = Table2.ID AND Table1.Date = Table2.Date

ID     Date       InTime   OutTime
A001   20000501   14:00:00 23:00:00
A002   20050501   08:00:00 16:00:00

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

Проверьте вывод этого запроса:

SELECT * FROM Table2 WHERE ID = 'A001' AND Date = '20000501'

Бьюсь об заклад, вы получите более одного ряда .....

Марк

Попытка объяснить дальше - я все еще думаю, что вы неправильно понимаете ВНУТРЕННЕЕ СОЕДИНЕНИЕ или пытаетесь сделать что-то, что на самом деле не может быть легко сделано.

Ваш вывод выглядит примерно так:

ID Date Intime Outtime

A001   20000501 14:00:00 23:00:00
A001   20000501 18:00:00 16:00:00
A002   20000501 14:00:00 23:00:00
A002   20000501 18:00:00 16:00:00

Если вы действительно получаете этот вывод из вашего ВНУТРЕННЕГО СОЕДИНЕНИЯ, то это означает:

  • вам больше всего нравится иметь одну строку с ID=A001 и Date=20000501 в вашей таблице1
  • у вас есть две (или более) строки в вашей таблице 2 с ID=A001 и Date=20000501

ВНУТРЕННЕЕ СОЕДИНЕНИЕ будет объединять строку № 1 из таблицы 2 с одной строкой из таблицы 1, а затем строку № 2 из таблицы 2 с одной строкой из таблицы 1 и т. Д.

Если у вас есть несколько записей с одинаковыми значениями (ID, дата) в таблице 2, вы получите дубликаты с INNER JOIN - это не является ошибкой, а только способом ВНУТРЕННЕЕ СОЕДИНЕНИЕ работает.

...