我正在尝试创建SELECT
,我需要通过定义主题类型的列选择指定的表:
table_buildings
id name location source_type source_id
1 NY Appartament New York 0 NULL
2 Guggenheim Museum Manhattan 1 27
3 MoMA New York 2 3
table_url // source type == 1
id name url
27 Guggenheim Site http://www.guggenheim.org/
table_books // source type == 2
id name pages sample author
3 World Museums 125-127 path/img.jpg John Smith
我不知道是否可能,但我在查询中没有IF
语句时遇到了一些问题,因为我可以在source_type
列的table_buildings
列找到合适的表}}
是否存在soma tecnique在IF
查询中使用SELECT
?
答案 0 :(得分:2)
我只是加入两个表并使用COALESCE
在连接表中使用重复的列名。
SELECT COALESCE(table_url.name, table_books.name) as name, url, pages, sample author FROM table_buildings
LEFT OUTER JOIN table_url ON table_buildings.source_type = 1 AND table_buildings.source_id = table_url.id
LEFT OUTER JOIN table_books ON table_buildings.source_type = 2 AND table_buildings.source_id = table_books .id
答案 1 :(得分:1)
恐怕唯一可行的方法是无条件地从所有表中选择。虽然没有多少开销 只需要根据需要加入尽可能多的表。没有相应信息的那些只会返回空值。
答案 2 :(得分:0)
您可以UNION
三个SELECT
个JOIN
个WHERE
到具有CASE
条款的三个表格。
或者,您可以在一个查询中加入所有三个表,并使用source_type
运算符根据{{1}}从适当的联接表中选择一列。
答案 3 :(得分:0)
您可以在SELECT中使用“CASE WHEN”。
SELECT
table_buildings.id,
table_buildings.name,
table_buildings.location,
CASE WHEN table_buildings.source_type = 0
THEN ""
ELSE CASE WHEN table_buildings.source_type = 1
THEN table_url.name
ELSE table_books.name
END CASE
END CASE AS source_name
FROM table_buildings
LEFT JOIN table_url
ON table_buildings.source_id = table_url.id
LEFT JOIN table_books
ON table_buildings.source_id = table_books.id