Sql server 如何创建SQL Server查询以对预先存在的查找(基)表进行验证?

Sql server 如何创建SQL Server查询以对预先存在的查找(基)表进行验证?,sql-server,ssms,lookup,base,Sql Server,Ssms,Lookup,Base,我有一些客户记录,其中一个字段是country 下面是记录,A列是客户编号,be列是客户名称,C列是国家 CNumber CName CCountry ----------------------------- 0001 CustomerA USA 0002 CustomerB Japan 0003 CustomerC France 0004 CustomerD Hoss 在SQL server数据库中,已经有一个表名COUNTRY,其中列出了所有国家

我有一些客户记录,其中一个字段是country

下面是记录,A列是客户编号,be列是客户名称,C列是国家

CNumber  CName     CCountry
-----------------------------
0001     CustomerA USA
0002     CustomerB Japan
0003     CustomerC France
0004     CustomerD Hoss
在SQL server数据库中,已经有一个表名COUNTRY,其中列出了所有国家/地区。要比较所有客户在C列中是否都有有效的国家/地区名称,该查询是什么?我们可以看到客户0004拥有的国家/地区HOS不是国家/地区。我需要查询告诉我,对于0004客户,这是一个无效的国家/地区


谢谢您的帮助。

如果您想列出所有国家/地区无效的记录

SELECT *
  FROM customer
 WHERE CCountry NOT IN (SELECT CCountry
                          FROM country)

基本上,您只想知道哪些客户的国家/地区不在国家/地区表中。这说明:

   SELECT  *
    FROM    CUSTOMER
    WHERE   CUSTOMER.COUNTRY NOT IN (SELECT NAME FROM COUNTRY)
您可以编辑此项以仅返回具有无效国家/地区的客户ID:

   SELECT   CUSTOMER.ID
    FROM    CUSTOMER
    WHERE   CUSTOMER.COUNTRY NOT IN (SELECT NAME FROM COUNTRY)

或者可能是他们客户使用的国家和id。然后,您可以给出一条自定义错误消息:John不幸的是,您指定的国家/地区:asdf无效。

从设计角度来看,您的国家/地区表中应该有一个唯一的国家/地区id。列C应该包含该ID,并且它应该包含一个外键,这样您就只能存储有效的国家ID了。我得到的部分是,国家表中的ID应该是唯一的,我还得到c列应该是那个国家的id。但是不要得到这个部分,它应该包含一个外键,这样你只能存储有效的国家id–你是说c列将是外键吗?谢谢。是的,C列将是外键。我建议你用谷歌搜索t-sql外键,或者在这里更全面地阅读它们:谢谢,我会试试这个,让你知道它是怎么回事。谢谢,我会试试这个,让你知道它是怎么回事。