如何从子查询中访问先前select语句中的列数据?

时间:2011-02-22 16:34:27

标签: mysql

问题

如何从子查询中访问先前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。我做错了什么?

2 个答案:

答案 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 = '#'