sql连接问题

Jos*_*he4 0 mysql sql

我有两张桌子,拍卖和用户.

我想从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中肯定有很多记录,其类别设置为假.

Qua*_*noi 5

我建议使用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)