选择一个表并连接 2 个不同的表

Posted

技术标签:

【中文标题】选择一个表并连接 2 个不同的表【英文标题】:Select a table and join 2 different tables 【发布时间】:2014-07-25 17:17:17 【问题描述】:

我有3个表,书表是主表,女性和男性是次要的,我需要通过条件加入第二和第三。

示例书:

+------+---------+----------+
| b_id | b_title | b_author |
+------+---------+----------+
|    1 | First   |        3 |
|    2 | Second  |        1 |
|    3 | Third   |       -4 |
|    4 | test    |       -3 |
+------+---------+----------+

男:

+------+--------+
| m_id | m_name |
+------+--------+
|    1 | John   |
|    2 | Jim    |
|    3 | Jessy  |
|    4 | Mike   |
|    5 | Tom    |
+------+--------+

女性:

+------+--------+
| f_id | f_name |
+------+--------+
|    1 | Sarah  |
|    2 | Shanon |
|    3 | Nina   |
|    4 | Shina  |
|    5 | Mary   |
+------+--------+

现在我需要从书中选择,当 b_author 为正时,从男表中选择,而 b_author 从女表中选择。

SELECT b_id,b_title, IF(b_author > 0,m_name,f_name) AS 'b_author' FROM book -- how make join here.

【问题讨论】:

dev.mysql.com/doc/refman/5.0/en/join.html 更重要的是,这是格式化数据库的一种糟糕方式。为什么不只是有一个“作者”表,其中有一列指定男性或女性?然后使用一个外键(在本例中为 author_id),您可以轻松地将表连接在一起。 @ahjohnston25 我不能使用其他桌子,因为公司之前设计的桌子。 【参考方案1】:
select *
from book b
left join male m on m.m_id=b.b_author
left join female f on f.f_id=b.b_author*-1

【讨论】:

以上是关于选择一个表并连接 2 个不同的表的主要内容,如果未能解决你的问题,请参考以下文章

SQL 内连接 2 个具有多列条件的表并更新

当您连接 2 个具有相同架构的表并检查除一个以外的所有字段是不是相等时,如何避免在 SQL 中编写冗长的 where 子句?

使用子选择选择 FROM 表并修改生成的表名

从 2 个不同的表中选择

使用选择列表查询 Oracle

连接两个表并从第一个表中选择一个相关值