我有3個表:MySQL的 - 最好的辦法,以保證唯一值在多行
Molecule:
id
Atom:
id
MoleculeAtom: # Composite primary key
molecule_id
atom_id
我的目標是,以確保沒有原子的組成分子的組合,是重複的。例如,水分子,我會在MoleculeAtom表中存儲兩行; 1個氫原子和1個氧原子。正如你所看到的,我需要確保沒有其他分子只有氫和氧,儘管可能有其他分子包括氫和氧。
在這一點上,我有一個查詢,它標識哪些分子包含氫或氧,並且只有MoleculeAtom表中有2個原子。
SELECT
m.id, m.name, (SELECT count(*) from molecule_atom where molecule_id = m.id group by molecule_id) as atomCount
FROM
molecule AS m
INNER JOIN
molecule_atom AS ma ON ma.molecule_id = m.id
WHERE
ma.atom_id IN (1,2)
HAVING atomCount = 2;
它返回(示範段):
+----+----------------------------+-----------+
| id | name | atomCount |
+----+----------------------------+-----------+
| 53 | Carbon Dioxide | 2 |
| 56 | Carbon Monoxide | 2 |
+----+----------------------------+-----------+
(我知道,CO和CO2具有完全相同的原子,以不同的量,但DIS-方面,作爲我跟蹤數量作爲另一列在同一表)
截至目前我拉動上述結果,並檢查他們的atom_ids通過PHP,這意味着我必須爲每個分子發出一個單獨的查詢,這似乎效率低下,所以我正在查看是否有可能做這個檢查嚴格使用SQL。
請原諒可能與化學有關的任何錯誤,chem101已經很長時間了。
你知道除了'H2O',還有'H2O2',對吧? – 2012-03-16 00:35:52
分子/原子模式抽象我真正在做什麼,這就是爲什麼提到我不關心數量,只有確保跨分子獨特原子的原則。 – 2012-03-16 00:43:28