1

假设您有这些表:

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 和 name FROM PHARMACY 中获取数据,从 PHARMACIST 中获取保险编号、姓名和姓氏列,用于所有销售名为 Kronol 的药物的药店。

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

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

4

2 回答 2

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运算符将不起作用,因为您要从各个表中选择不同的列和不同数量的列。对于您要尝试做的事情,这都是错误的方法。还值得一提的是,aLEFT JOIN可能对您来说是更好的选择,也可能不是更好的选择,具体取决于您要满足的确切要求。

于 2012-06-18T15:13:44.110 回答
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')
于 2012-06-18T15:33:18.297 回答