SQL WHERE <from another =“”table =“”> </from>

时间:2012-06-18 15:04:19

标签: sql

假设你有这些表:

PHARMACY(**___id_pharmacy___**, name, addr, tel)
PHARMACIST(**___Insurance_number___**, name, surname, qualification, **id_pharmacy**)
SELLS(**___id_pharmacy___**, **___name___**, price)
DRUG(**___Name___**, chem_formula, **id_druggistshop**)
DRUGGISTSHOP(**___id_druggistshop___**, name, address)

我认为这将更具体。

所以,我正在尝试构建一个SQL语句,在其中我将从id_pharmacy获取数据并命名FROM PHARMACY,来自PHARMACIST的insurance_number,name和surname列,用于销售该药物的所有药房,名为Kronol

基本上就是这样。我知道我错过了我之前编写的代码中的关系。

注意:那些左下角有下划线的列名称带下划线(主键)。

2 个答案:

答案 0 :(得分:1)

您编写的查询将无法在我所知道的任何DBMS中使用。

您很可能想要使用JOINs的某种组合。

由于未提供确切的架构,请考虑此伪代码,但希望它能让您走上正确的轨道。

SELECT PH.Ph_Number, PH.Name, PHCL.Ins_Number, PHCL.Name, PHCL.Surname
FROM   PH
  INNER JOIN PHCL ON PHCL.PH_Number = PH.Ph_Number
  INNER JOIN MLIST ON MLIST.PH_Number = PH.PH_Number
WHERE MLIST.Name = "Andy"

我显然假设表之间可能存在或可能不存在某些关系,但希望这将非常接近。 UNION运算符不起作用,因为您从各个表中选择不同的列和不同数量的列。对于你想要做的事情,这是一个错误的方法。值得一提的是,LEFT JOIN对您来说可能是也可能不是更好的选择,具体取决于您尝试满足的具体要求。

答案 1 :(得分:1)

好的,试试这个查询:

SELECT  A.id_pharmacy, A.name AS PharmacyName, B.Insurance_number, 
        B.name AS PharmacistName, B.surname AS PharmacistSurname
FROM PHARMACY A
LEFT JOIN PHARMACIST B
ON A.id_pharmacy = B.id_pharmacy
WHERE A.id_pharmacy IN (SELECT id_pharmacy FROM SELLS WHERE name = 'Kronol')