很抱歉,如果这个标题有点令人费解......我通常被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来获取订阅日志行,还是需要将其拆分为两个查询?
谢谢!
答案 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'