我有一个作者表
| au_id | au_fname | au_lname |城市|州|
我想要做的是根据与Sarah生活在同一州的人来查询姓名和姓氏
到目前为止我所拥有的:
SELECT AU_FNAME, AU_LNAME FROM authors WHERE "STATE" like 'CA'
我不想在我的代码中使用静态,我希望它基于选定的人 - 在这种情况下是Sarah。
谢谢
答案 0 :(得分:2)
使用Sub-Query
查找Sarah
的状态并过滤state
试试这个
SELECT AU_FNAME, AU_LNAME
FROM authors
WHERE STATE in (select state from authors where au_fname = 'Sarah')
答案 1 :(得分:0)
SELECT AU_FNAME, AU_LNAME FROM authors WHERE STATE in (select state from authors where au_fname = 'sarah')
或
select a1.AU_FNAME, a1.AU_LNAME FROM authors a1
inner join authors a2 on a1.state = a2.state
where a2.au_fname = 'sarah'
答案 2 :(得分:0)
如果只有一个“Sarah”,那么最好使用for(var unusedVariable = 0;1==1;unusedVariable++){//equivalent of "startover:"
if(condition1){
continue;//goto startover;
}
if(condition2){
continue;//goto startover;
}
if(condition1){
break;//goto notFound;
}
}//notFound:
而不是=
:
in
当然,如果可能有多个Sarah,则需要select a.AU_FNAME, a.AU_LNAME
from authors a
where a.state = (select a2.state from authors a2 where a2.au_fname = 'Sarah');
。但in
通常具有更好的性能,因为数据库引擎知道搜索单个值。
答案 3 :(得分:0)
问题定义有点模糊,因此基于合格的猜测,似乎要求解决方案检索数据行(包含所有数据字段,即根据标题SELECT *
,或者只是第一个/根据描述的姓氏,即SELECT AU_FNAME, AU_LNAME
),与states
相关的au_fname
(例如Sarah)作为参数传递给SQL查询。在最常见的情况下,多个不同的作者与多个不同的州相关的相同的名字。基于此假设,查询/子查询可能看起来像
SELECT * FROM authors
WHERE STATE IN (SELECT [state] from authors WHERE au_fname = @afname)
确切的语法可能取决于解决方案中使用的数据库的细节。
答案 4 :(得分:0)
内部联接将是我对子查询的第一选择......某些数据库引擎在子查询中表现不佳(想到较旧的MySQL版本),但几乎任何引擎都应针对内部联接进行优化:
SELECT a1.AU_FNAME, a1.AU_LNAME
FROM Authors AS a1
INNER JOIN Authors AS a2 ON a1.state = a2.state
WHERE a2.au_fname = 'sarah'
GROUP BY a1.AU_FNAME, a1.AU_LNAME;