Sql 联合两张桌子
我有一个TICKET表,用户可以在其中将记录与Supplier表中的Supplier\u ID链接,或者他可以手动输入一个供应商名称,它的Supplier\u ID=0作为快速TICKET记录,以避免创建一个供应商记录,在终身供应商购买中填写20个供应商字段Sql 联合两张桌子,sql,ms-access,Sql,Ms Access,我有一个TICKET表,用户可以在其中将记录与Supplier表中的Supplier\u ID链接,或者他可以手动输入一个供应商名称,它的Supplier\u ID=0作为快速TICKET记录,以避免创建一个供应商记录,在终身供应商购买中填写20个供应商字段 Ticket_ID | Supplier_ID | Supplier -------------------------------------- 1 | 0 | A Company 2
Ticket_ID | Supplier_ID | Supplier
--------------------------------------
1 | 0 | A Company
2 | 0 | Inc. Co
3 | 10 |
4 | 1 |
供应商表看起来像加上其他20个字段
Supplier_ID | Supplier
-------------------------
1 | A Company
2 | B Company
3 | C Company
4 | D Company
现在,我想提供一个自动完成文本框,其中包含所有来自供应商表的唯一供应商以及票证表中供应商ID=0但与供应商的任何供应商名称都不匹配的名称
到目前为止,我已经掌握了MS ACCESS SQL
SELECT Supplier_ID, Supplier FROM SUPPLIER
UNION ALL
SELECT Supplier_ID, Supplier FROM TICKET WHERE Supplier_ID = 0 AND Supplier <> '' GROUP BY Supplier, Supplier_ID
除了有两个A公司,一个供应商id为1,另一个供应商id为0外,工作几乎正常。我希望避免添加ID为0的重复项
有可能吗?我认为您希望将任何供应商排除在查询的第一部分之外。因此:
SELECT Supplier_ID, Supplier
FROM SUPPLIER
UNION ALL
SELECT DISTINCT Supplier_ID, Supplier
FROM TICKET as t
WHERE t.Supplier <> "" AND
t.Supplier NOT IN (SELECT s.Supplier FROM Supplier as s);
你不需要工会。。您需要一个左join group by,maxe确实需要一个并集,因为两侧都可能有不匹配的条目。只是需要过滤,因为刚才弹出的答案doeswell在我看来是一个设计糟糕的数据库。。。你怎么会有两个供应商栏?@GordonLinoff我编辑了第二个select,其中supplier_ID=0
SELECT Supplier_ID, Supplier
FROM SUPPLIER
UNION ALL
SELECT DISTINCT Supplier_ID, Supplier
FROM TICKET as t
WHERE t.Supplier <> "" AND
t.Supplier NOT IN (SELECT s.Supplier FROM Supplier as s);