1

私はSQLを初めて使用します。内部クエリから順序付けられたデータを取得するのを手伝ってもらえますか

select 
    * 
from emp 
where id 
    (select order from department where name = 'testing' order by order asc).

内部クエリから注文データを取得しています。取得したIDを使用して、内部クエリと同じ順序になるようにempテーブルから結果を取得する必要があります。誰でもこれで私を助けることができますか?ティア。

4

5 に答える 5

2

クエリを結合として書き直すのが妥当な場合:

select e.*
from emp e
inner join department d
    on e.id = d.order
where d.name = 'testing'
order by d.order asc

これにより結果が変わるのは、1 つ以上の行に一致departmentする同じ値を持つ複数の行がある場合です。この場合、このクエリは複数の行を返しますが、元の行は返しません。しかし、そのような条件が当てはまらない場合、これが私が推奨するクエリです。orderemp

于 2013-09-30T08:46:42.050 に答える
1

ダミアンの答えはとてもクールで完璧です。それでもサブクエリを使用したい場合は、これを試してください

select * 
from emp 
where id in (select order from department where name = 'testing' order by order asc) 
order by id asc

これが役に立ちますように

于 2013-09-30T08:53:04.510 に答える
1

これにより、emp.id と department.order の間に複数の一致がある場合に適切な行数が得られます。

select * from emp e
where exists
(select 1 from department d where d.name = 'testing' 
and e.id = d.order1) -- order is a reserved word in several sql languages
order by id

あなたのテーブルの間で何かおかしなことが起こっているようです。部門には従業員に関する情報が含まれますか(従業員テーブルであると想定しています)?

于 2013-09-30T09:05:04.913 に答える
0

内部クエリを含む実際の一時テーブルが存在し、それが特定の方法でソートおよび処理されるという保証はありません。ただし、外側のクエリを emp.id で並べ替えることができます。

select * from emp where id in 
     (select order from department where name = 'testing')
order by id asc
于 2013-09-30T08:51:39.333 に答える
0
select e.* from emp as e, department d where e.id=d.order and d.name='testing' order by d.order 
于 2013-09-30T08:53:46.577 に答える