我想知道以下条件的SQL查询
我有三个表,Table 1
我想从中获取数据,第二个是Table1Mapping
,第三个是master
表。
如果Table1Mapping
表和master
存在相关数据,我希望从Table 1
获取数据。
Table 1
会很常见。
例如:
表1:
ID Name
1 ABC
Table1Mapping:
Table1ID Country Code
1 US 958
2 IND 89
主
Country Code
UK 87
US 56
IND 45
用户可以选择多个国家/地区。如果他选择美国和IND,则美国代码应该从Table1Mapping
获得,IND应该来自master
,因为没有Id 1和US的数据。
两个表中的代码可能不同。
答案 0 :(得分:0)
您可以将两个表连接到Table1并使用条件
进行一些操作基于您的描述的小例子:
contentEdgeInsets
答案 1 :(得分:0)
我不知道你的架构是什么样子的(特别是表格是如何相关的),所以这只是一个黑暗的镜头:
SELECT *
FROM Table1 t
LEFT JOIN Table1Mapping m ON t.ID = m.Table1_ID
INNER JOIN Master s ON COALESCE(m.Master_ID, t.Master_ID) = s.Master_ID
答案 2 :(得分:0)
LEFT JOIN到两个表并使用COALESCE怎么样?
SELECT COALESCE(m.SomeColumn,mt.SomeColumn) AS SomeColumn
FROM Table1 t1
LEFT JOIN Table1Mapping m ON t1.PK=m.FK
LEFT JOIN MasterTable mt ON t1.PK=mt.FK
当没有匹配的行时,LEFT JOIN将产生NULL值。 COALESCE将在其参数列表中返回第一个非NULL值。
所以效果是如果在Table1Mapping中找到非NULL值,它将被返回,否则将返回MasterTable中的值。
答案 3 :(得分:0)
您没有向我们提供您的架构,因此我创建了幻想数据以显示其外观。
描述: 将2 LEFT JOINS与COALESCE结合使用,它将为您提供非空的第一个元素。
DECLARE @tab1 TABLE
(
id INT
)
DECLARE @tabMapping TABLE
(
id INT,
anycol VARCHAR(100)
)
DECLARE @tabMaster TABLE
(
id INT,
anycol VARCHAR(100)
)
INSERT INTO @tab1 (id) VALUES (1),(2),(3),(4),(5),(6)
INSERT INTO @tabMapping (id,anycol) VALUES (1,'a'),(2,'b'),(3,'c')
INSERT INTO @tabMaster (id,anycol) VALUES (3,'c'),(4,'d'),(5,'e')
SELECT t1.id,
COALESCE(map.anycol,mas.anycol,'no data for this id')
FROM @tab1 t1
LEFT JOIN @tabMapping map ON t1.id = map.id
LEFT JOIN @tabMaster mas ON t1.id = mas.id
你应该关心什么:如果数据在map和master中怎么办?如果数据不在映射中也不在掌握中怎么办(在我的例子中,如果在映射中找不到任何内容并且掌握一个默认值("没有该id的数据"),如果两个表中都存在数据,则值将来自映射表,因为它&#39 ; s是coalesce()中的第一个参数......