我的数据库中有三个表。
在SELECT
Ass.NAME AS REGISTER_NAME,
Ass.ASSET_NUM AS SMSF_NUM,
CASE
WHEN aXM.ATTRIB_44 IS NULL THEN NULL
END AS SMSF_HOLDER_TYPE,
CASE
WHEN aXM.ATTRIB_44 IS NULL THEN NULL
ELSE aXM.ATTRIB_44
END AS xCONDITION
FROM
siebel.s_asset Ass
LEFT JOIN Siebel.S_ASSET_XM aXM
on Ass.row_id = aXM.par_row_id
WHERE
Ass.NAME = 'SMSF Auditor'
AND Ass.STATUS_CD = 'Registered'
AND (aXM.ATTRIB_03 IS NULL OR aXM.ATTRIB_03 = 'Condition')
内,GeneralNeeds
需要保留ProcessID
和MedicalTestID
GUID。
一旦我从任何一个表中插入现有的GUID,我就会得到#34;冲突"错误消息,我认为这意味着给定的GUID不存在于另一个表中。
例如:如果我从SportTestID
插入GUID,那么它会告诉我MedicalTest
没有给定的GUID。
是否可以将多个键引用到一列?
答案 0 :(得分:3)
我在此推荐的设计是表/子表解决方案。这意味着,引入第4个表Test
。 Test
表仅用作将所有不同测试类型链接在一起的表。如果您熟悉面向对象编程,请将其视为基本类型。基本上,您的ProcessID
指向Test
,然后指向特定测试类型之一(SportsTest,MedicalTest,WhateverTest)。如果您愿意,还可以在Type
表中添加Test
,以帮助您了解它是哪种类型的测试。这里有一个关键的问题:在MedicalTest
和SportsTest
表中,主键(比如MedicalTestID
)也是一个指向TestID
Test
的外键。 1}}。通过这种方式,您可以在GeneralNeeds
中使用单个列,因为引用的是单个表类型Test
。由于Test
和相应的MedicalTest
或SportsTest
具有相同的主键,因此您可以轻松地执行查询所需的联接。
简单示例:
假设你有一个ID为1的MedicalTest
(让他们忘记一分钟的GUID,以便更容易阅读)
然后,您还会在Test
中拥有ID为1的记录。
然后,ProcessID
的1真正指向Test
记录,然后您可以加入MedicalTest
记录。
如果您仍然感到困惑,请告诉我,我会尝试添加更多细节,但希望这会让您朝着有效的方向前进。