У меня две таблицы, аукционы и пользователи.
Я хочу выбрать таблицу имен пользователей из аукционов, где категория = x, а затем выбрать поля a, b и c из таблицы пользователей, где поля имени пользователя в пользователях совпадают с полями имени пользователя аукционов.
Я пытаюсь это:
SELECT AUCTIONS.USERNAME, USERS.firstname, USERS.lastname, USERS.flaggedauctions
FROM AUCTIONS
INNER JOIN USERS
ON AUCTIONS.USERNAME=USERS.USERNAME
Что, кажется, работает. Однако USERNAME не является первичным ключом ни в одной из таблиц, и в таблице аукционов может быть много записей с одним и тем же именем пользователя, поскольку в таблице пользователей будет только одна запись на имя пользователя.
Вышеупомянутый запрос работает, но проблема возникает, если я хочу ограничить набор результатов, скажем, 10, для нумерации страниц. Это может привести к 10 возвращенным записям, некоторые из которых являются дубликатами. Есть ли способ выполнить запрос, ограниченный 1 записью на фамилию внутри другого запроса?
edit: в ответ на сообщение Quassnoi
имена пользователей всегда уникальны
Если у меня есть
Auctions:
username category blah
-------------------------------------
user1 category1 tshirt
user2 category2 jeans
user3 category3 shoes
user2 category3 belt
user3 category3 pants
Users:
username firstname lastname
-------------------------------------
user1 john smith
user2 fred black
user3 alice brady
Then given category 3 as the category, I would want to show:
username firstname lastname
-------------------------------------
user2 fred black
user3 alice brady
With username coming from the auctions table.
Instead, at the moment this will display:
username firstname lastname
-------------------------------------
user2 fred black
user3 alice brady
user3 alice brady
edit2:
Я использую
SELECT username, firstname, lastname
FROM USERS
WHERE username
IN (
SELECT USERNAME
FROM AUCTIONS
WHERE category = 'fake'
)
LIMIT 0 , 30
, который возвращает 0 результатов. В АУКЦИАХ, безусловно, есть много записей с категорией, установленной на подделку.