Sql 联合两张桌子

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表,用户可以在其中将记录与Supplier表中的Supplier\u ID链接,或者他可以手动输入一个供应商名称,它的Supplier\u ID=0作为快速TICKET记录,以避免创建一个供应商记录,在终身供应商购买中填写20个供应商字段

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