使用表中特定条目的数据从表中选择*

时间:2016-03-14 01:41:25

标签: sql

我有一个作者表

| au_id | au_fname | au_lname |城市|州|

我想要做的是根据与Sarah生活在同一州的人来查询姓名和姓氏

到目前为止我所拥有的:

SELECT AU_FNAME, AU_LNAME FROM authors WHERE "STATE" like 'CA'

我不想在我的代码中使用静态,我希望它基于选定的人 - 在这种情况下是Sarah。

谢谢

5 个答案:

答案 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;