Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用不相交的连接在SQL中编写表_Sql_Database_Relationship - Fatal编程技术网

如何使用不相交的连接在SQL中编写表

如何使用不相交的连接在SQL中编写表,sql,database,relationship,Sql,Database,Relationship,所以我有三个表,我想用不相交的连接创建它们。这些是个人、承租人和雇员。 所以每个人都必须是房客或雇员,决不能两者兼而有之。 我使用PersonID主键创建了一个Person表,tenant和Employee作为两个独立的表,它们的主键都是链接回PersonPersonID的外键。 我如何在这里创建一个不相交的区域,每个人只能是租户或雇员?谢谢您可以试试这个,它将挑选出每一位个人或员工: SELECT * FROM (SELECT person.*, CASE WHEN

所以我有三个表,我想用不相交的连接创建它们。这些是个人、承租人和雇员。 所以每个人都必须是房客或雇员,决不能两者兼而有之。 我使用PersonID主键创建了一个Person表,tenant和Employee作为两个独立的表,它们的主键都是链接回PersonPersonID的外键。
我如何在这里创建一个不相交的区域,每个人只能是租户或雇员?谢谢

您可以试试这个,它将挑选出每一位个人或员工:

SELECT *
FROM (SELECT person.*,
             CASE WHEN employee.id IS NULL THEN 0 ELSE 1 END AS is_employee,
             CASE WHEN tenant.id   IS NULL THEN 0 ELSE 1 END AS is_tenant
      FROM person LEFT JOIN employee on person.id = employee.id
                  LEFT JOIN tenant on person.id = tenant.id) AS tA
WHERE tA.is_employee <> tA.is_person 

确保所有id列都已编制索引。

您可以尝试此操作,它将挑选出个人或员工:

SELECT *
FROM (SELECT person.*,
             CASE WHEN employee.id IS NULL THEN 0 ELSE 1 END AS is_employee,
             CASE WHEN tenant.id   IS NULL THEN 0 ELSE 1 END AS is_tenant
      FROM person LEFT JOIN employee on person.id = employee.id
                  LEFT JOIN tenant on person.id = tenant.id) AS tA
WHERE tA.is_employee <> tA.is_person 
确保id列都已编入索引。

-您能提供一些示例数据和您希望返回的内容吗?这听起来应该是一个简单的连接。学习如何提问。请回答您的问题,并根据这些数据添加一些内容和预期输出。请您的问题-不要在评论中发布代码或附加信息。您使用的是哪种产品?博士后?神谕SQL只是一种查询语言,而不是特定数据库产品的名称。-您能否提供一些示例数据以及您希望返回的内容?这听起来应该是一个简单的连接。学习如何提问。请回答您的问题,并根据这些数据添加一些内容和预期输出。请您的问题-不要在评论中发布代码或附加信息。您使用的是哪种产品?博士后?神谕SQL只是一种查询语言,而不是特定数据库产品的名称。