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

您发布的查询基本上执行三个查询:

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 回答