2
    SELECT * FROM `charges`
    UNION ALL
    SELECT * FROM `confinement`
    UNION ALL
    SELECT * FROM `ultrasound` 
WHERE procedure_no IN (100, 200)
ORDER BY FIELD(procedure_no,100,200);

SQL コマンドの最初の部分は、料金の 3 つのテーブルを結合する場所です。それらはすべて同じですが、コンテキストが異なるだけです。そのコマンドでプロシージャ番号 100 と 200 のみを表示したいので、結果は 2 つだけです。しかし、mysqlには多くの結果が表示されます。

これが結果です http://i.stack.imgur.com/2STXD.png

4

1 に答える 1

2

投稿したクエリは、基本的に3つのクエリを実行します。

SELECT * FROM `charges`

SELECT * FROM `confinement`


SELECT * FROM `ultrasound` WHERE procedure_no IN (100, 200) ORDER BY FIELD(procedure_no,100,200);

つまり、現在、超音波のみが手順番号によってフィルタリングされています。試してみてください(テストされていません):

SELECT * FROM
    (SELECT * FROM `charges`
    UNION ALL
    SELECT * FROM `confinement`
    UNION ALL
    SELECT * FROM `ultrasound` ) AS t1
WHERE t1.procedure_no IN (100, 200)
ORDER BY FIELD(t1.procedure_no,100,200);

ここでの基本的なSQLフィドル:http ://sqlfiddle.com/#!2 / e1f08 / 1

于 2013-01-11T03:49:01.753 に答える