我有两张桌子,拍卖和用户.
我想从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
Run Code Online (Sandbox Code Playgroud)
这似乎有效.但是,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
Run Code Online (Sandbox Code Playgroud)
EDIT2:
我在用
SELECT username, firstname, lastname
FROM USERS
WHERE username
IN (
SELECT USERNAME
FROM AUCTIONS
WHERE category = 'fake'
)
LIMIT 0 , 30
Run Code Online (Sandbox Code Playgroud)
返回0结果.AUCTIONS中肯定有很多记录,其类别设置为假.
我建议使用SELECT DISTINCT,但我宁愿问你这个问题:
鉴于表格:
AUCTION USERNAME
-------- -------
Sotheby's john
Christie's john
USERNAME FIRSTNAME LASTNAME
-------- -------- --------
john John Doe
john John Davis
Run Code Online (Sandbox Code Playgroud)
,你想选择Sotheby's什么,Christie's为什么?
除非你回答这个问题,否则你无法理解" 运行查询限制为每个用户名1条记录的方式 " 是什么意思.
更新:
SELECT *
FROM users
WHERE username IN
(
SELECT username
FROM auctions
WHERE category = 'category3'
)
Run Code Online (Sandbox Code Playgroud)
更新2:
这个查询是否返回了什么?
SELECT u.username, u.firstname, u.lastname
FROM auctions a, users u
WHERE a.category = 'fake'
AND u.username = a.username
Run Code Online (Sandbox Code Playgroud)
更新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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
196 次 |
| 最近记录: |