1) Предложение WHERE
должен прийти после пункта JOIN ... ON ...
.
2) Вы ссылаетесь на таблицу c
:
ON c.Username = d.Username
но вы не определили, что c
есть.
3) Вы хотите удалить дублированные имена пользователей, но вы этого не сделали. Вам нужно SELECT DISTINCT Username
или GROUP BY Username
.
4) Для того, чтобы решить проблему неоднозначных имен столбцов можно использовать один из двух подходов:
- указать псевдоним таблицы перед именем столбца (разделенные точкой).
- Использовать
USING
в качестве условия соединения, чтобы избежать получения столбца Username
дважды.
Вот пример второго подхода:
...
FROM delivery AS d
INNER JOIN Customers AS c USING (Username)
...
Как вы можете видеть, это гораздо более кратким, и это означает, что вы можете ссылаться на Username
в другом месте в запросе без указания псевдонима таблицы для устранения неоднозначности.
Совершенно иной способ решения проблемы заключается в использовании EXISTS
вместо JOIN
:
SELECT DISTINCT
Username, IP
FROM customers
WHERE EXISTS
(
SELECT *
FROM delivery
WHERE delivery.Username = customers.Username
AND delivery.date >= '2012-06-01'
)
ORDER BY IP
Вы также можете быть в состоянии удалить DISTINCT
при использовании этого подхода, исходя из предположения, что нет дублирует в вашей таблице customers
.
«Это не работает» Можете ли вы быть более конкретным? Вы получили сообщение об ошибке? Какое точное сообщение? –