SQL WHERE<;从另一个表>;

SQL WHERE<;从另一个表>;,sql,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**

假设您有这些表:

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药物的药店的保险号、名称和姓氏列

基本上就是这样。我知道我在前面编写的代码中缺少了关系


注意:左下划线和右下划线的列名为下划线(主键)

据我所知,您编写的查询在任何DBMS中都不起作用

您很可能希望使用一些
联接的组合

由于没有提供确切的模式,请考虑此伪代码,但希望它能使您走上正确的轨道。

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
运算符将不起作用,因为您正在从各个表中选择不同的列和不同的列数。这是一个错误的方法,你要做的一切。同样值得一提的是,根据您试图满足的确切要求,
左连接对您来说可能是更好的选择,也可能不是更好的选择。

好的,尝试以下查询:

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')

MLIST
PH
之间以及
MLIST
PHCL
之间的关系是什么?有了这样一个令人困惑的问题,您最好向我们展示一些示例数据和预期输出您还试图联合具有不同列计数的集合,这将失败。我的错误。让我编辑上面的代码。我马上解释,谢谢你的回答。为了更具体,我编辑了这个问题。A.和B.到底是什么意思?@speci,查看第4行和第5行。药房表的短代码为a,药剂师表的短代码为B。为了简化代码。@speci-正如朱利安奈特所说,这些都是表别名,因此您可以用这些别名作为列的前缀,而不是表的全名