我有两张桌子,拍卖和用户。
我想从category = x的拍卖中选择用户名表,然后从users表中选择字段a,b和c,其中用户的用户名字段与拍卖中的用户名字段匹配。
我正在尝试这个:
SELECT AUCTIONS.USERNAME, USERS.firstname, USERS.lastname, USERS.flaggedauctions
FROM AUCTIONS
INNER JOIN USERS
ON AUCTIONS.USERNAME=USERS.USERNAME
这似乎有效。但是,USERNAME不是任何一个表中的主键,并且在拍卖表中可以有许多具有相同用户名的记录,因为在users表中每个用户名只有一条记录。
以上查询有效,但如果我想将结果集限制为10,则会出现问题。这可能导致返回10条记录,其中一些是重复记录。有没有办法在另一个查询中运行限制为每个姓氏1个记录的查询?
编辑:回答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结果。 AUCTIONS中肯定有很多记录,其类别设置为假。
答案 0 :(得分:5)
我建议使用SELECT DISTINCT
,但我宁愿问你这个问题:
鉴于表格:
AUCTION USERNAME
-------- -------
Sotheby's john
Christie's john
USERNAME FIRSTNAME LASTNAME
-------- -------- --------
john John Doe
john John Davis
,您希望为Sotheby's
选择什么以及为Christie's
选择什么?
除非你回答这个问题,否则无法理解“一种运行查询限制为每个用户名的记录的方式”是什么意思。
<强>更新强>
SELECT *
FROM users
WHERE username IN
(
SELECT username
FROM auctions
WHERE category = 'category3'
)
更新2:
此查询是否会返回某些内容?
SELECT u.username, u.firstname, u.lastname
FROM auctions a, users u
WHERE a.category = 'fake'
AND u.username = a.username
更新3:
SELECT ao.username, u.firstname, u.lastname
FROM (
SELECT DISTINCT username
FROM auctions a
WHERE category = 'fake'
) ao
LEFT JOIN
users u
ON u.username = a.username
答案 1 :(得分:2)
使用SELECT DISTINCT
代替SELECT
。
答案 2 :(得分:2)
如果我理解这一点,使用SELECT DISTINCT
代替SELECT
将解决您的问题
答案 3 :(得分:0)
英语不是我的母语,但如果我理解正确,您想要选择在给定类别x中进行拍卖的所有用户(一次)。
我不确定这种语法是否适用于MySQL,但尝试类似:
SELECT
AUCTIONS.USERNAME,
USERS.firstname,
USERS.lastname,
USERS.flaggedauctions
FROM
(
SELECT DISTINCT
AUCTIONS.USERNAME
FROM
AUCTIONS
WHERE
AUCTIONS.CATEGORY = x
) AS AUCTIONS
INNER JOIN
USERS
ON
USERS.USERNAME = AUCTIONS.USERNAME
答案 4 :(得分:0)
您只需使用
即可SELECT DISTINCT
a.username,
u.firstname,
u.lastname
FROM
Users u
RIGHT JOIN
Auctions a
ON
u.username = a.username
WHERE
a.category = 'category3'