我有一个包含三个表的 MySQL 数据库:sample
, method
, compound
.
sample
有以下列:id(PK)(int)
, date(date)
, compound_id(int)
, location(varchar)
, method(int)
,value(float)
method
具有以下列:id(PK)(int)
,label(varchar)
并且compound
有:id(PK)(int)
, name(varchar)
,unit(varchar)
我正在尝试生成一个 SQL 命令,该命令仅针对以下条件提取唯一行:
- 日期 (
sample.date
) - 化合物名称 (
compound.name
) - 位置 (
sample.location
) - 方法 (
sample.method
)
但是,我想在标签中替换某些sample
列而不是数字:
sample.compound_id
匹配到compound.id
具有对应的compound.name
和compound.unit
我尝试查询的第一个 SQL 命令是:
SELECT sample.id, sample.date, compound.name, sample.location, method.label, sample.value, compound.unit
FROM sample, compound, method
WHERE sample.date = "2011-11-03"
AND compound.name = "Zinc (Dissolved)"
AND sample.location = "13.0"
AND method.id = 1;
上述命令的输出:
id date name location label value unit
1 2011-11-03 Zinc (Dissolved) 13.0 (1) Indivi... 378.261 μg/L
5 2011-11-03 Zinc (Dissolved) 13.0 (1) Indivi... 197.917 μg/L
9 2011-11-03 Zinc (Dissolved) 13.0 (1) Indivi... 92.4051 μg/L
但是当我查看sample
并比较sample.id
返回的内容时:
id date compound_id location method value
1 2011-11-03 13 13.0 1 378.261
5 2011-11-03 14 13.0 1 197.917
9 2011-11-03 47 13.0 1 92.4051
其中compound.id
47 对应于compound.id
47 和compound.name
“锌(溶解)”。化合物 ID #13 和 #14 分别是“铜(溶解)”和“铜(总)”。
因此,它似乎返回满足sample.date
和sample.location
不考虑compound.name
. 鉴于上述标准,我知道我的数据库应该只返回一行,但我得到的一些行与我指定的匹配sample.id
完全不同。sample.compound_id
compound.name
我想以SELECT
第一行中的列结束,以与我编写它们的顺序相同。此代码适用于我正在用 Python/Tkinter 编写的小型数据库查看器/报告器程序,并且依赖于统一的列。我用来初始化程序数据的代码按我的预期工作:
SELECT sample.id, sample.date, compound.name, sample.location, method.label, sample.value, compound.unit
FROM sample, compound, method
WHERE sample.compound_id = compound.id
AND sample.method = method.id;
它将每个唯一的行sample
替换为sample.compound_id
tocompound.name
和sample.method
tomethod.label
并在compound.unit
最后添加。
问题 #1:我需要如何重组我的查询,以便它只返回满足特定条件的行?
问题 #2:最终我将需要sample.locations
一次指定多个。OR
这就像为我需要的每个单独的位置添加一个声明一样简单吗?