按用户名选择用户,然后使用其UID从另一个表中选择数据

时间:2015-09-27 21:35:53

标签: sql

很抱歉,如果这个标题有点令人费解......我通常被ORM宠坏了,显然我的原始SQL技能很差。

我正在编写一个链接到vBulletin论坛的应用程序。用户使用他们的论坛用户名进行身份验证,对此的查询很简单(通过users表中的用户名进行选择)。下半部分更复杂。还有一个订阅表,其中包含时间戳,但这些订阅表的主键是用户ID,而不是用户名。

这是我到目前为止所做的工作:

SELECT
    forum.user.userid,
    forum.user.usergroupid,
    forum.user.password,
    forum.user.salt,
    forum.user.pmunread,
    forum.subscriptionlog.expirydate
FROM
    forum.user
    JOIN forum.subscriptionlog
WHERE
    forum.user.username LIKE 'SomeUSER'

不幸的是,这会返回整个订阅日志表,这是有道理的,因为其中没有用户名字段。是否可以使用我从forum.user.userid获取的用户ID来获取订阅日志行,还是需要将其拆分为两个查询?

谢谢!

3 个答案:

答案 0 :(得分:2)

问题在于你盲目加入这两张桌子。您需要指定它们所关联的列。

我想你想要这样的东西:

SELECT * FROM user u
   INNER JOIN subscriptionlog sl ON u.id = sl.userid
WHERE u.username LIKE 'SomeUSER'

答案 1 :(得分:1)

从用户选择* 你加入订阅s ON u.id = s.id 其中u.username ='someuser'

粗体位是您要添加的内容,它将2个表合并为一个返回结果的表。

答案 2 :(得分:1)

试试这个

SELECT
forum.user.userid,
forum.user.usergroupid,
forum.user.password,
forum.user.salt,
forum.user.pmunread,
forum.subscriptionlog.expirydate
FROM
forum.user
INNER JOIN forum.subscriptionlog
ON forum.subscriptionlog.userid = forum.user.userid
WHERE
forum.user.username LIKE 'SomeUSER'