在mySQL查询中使用IF

时间:2010-06-29 16:52:55

标签: php mysql if-statement

我正在尝试创建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

4 个答案:

答案 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三个SELECTJOINWHERE到具有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