问题
如何从子查询中访问先前select语句中的列数据?
下面是我正在尝试做的简单模拟。
使用的表:行情,用户
QUOTES TABLE
qid,(引用ID)
owner_uid,
creator_uid
SQL语法:
SELECT q.qid, q.owner_uid, q.creator_uid, owner.fname, owner.lname
FROM quotes q,
(SELECT u.fname, u.lname FROM users u WHERE u.uid = q.owner_uid) AS owner
WHERE q.qid = '#'
摘要
我希望能够使用报价表的owner_uid并为所有者表指定它,以便我可以返回该特定报价的所有所有者信息。
问题是,在所有者子查询中无法识别q.owner_uid。我做错了什么?
答案 0 :(得分:2)
在这种情况下,我相信你最好使用JOIN而不是子查询:
SELECT q.qid, q.owner_uid, q.creator_uid, u.fname, u.lname
FROM quotes q
JOIN users u ON u.uid = q.owner_uid
WHERE q.qid = '#'
答案 1 :(得分:2)
虽然我更喜欢djacobson的解决方案,但它没有直接回答这个问题。
我发现MySQL用户定义的变量可以完成这项工作。
http://dev.mysql.com/doc/refman/5.0/en/user-variables.html
MySQL变量允许跨语句数据访问...
我将所有者的uid保存到名为owner_uid的变量中,并将该变量固定在q.owner_uid的位置。
这是我在前一个SELECT语句中访问列数据的方法。
SELECT q.qid, @owner_uid:=q.owner_uid, q.creator_uid, owner.fname, owner.lname
FROM quotes q,
(SELECT u.fname, u.lname FROM users u WHERE u.uid = @owner_uid) AS owner
WHERE q.qid = '#'