繁体   English   中英

根据其中一个表中的值从多个表中获取 SQL 结果

[英]Get SQL results from multiple table based on value in one of the tables

我有一个主表(建议)和两个参考表(专家,朋友)

advices
----------------------------------------
|id      | advisor_id   | advisor_type |
----------------------------------------
| 1      | 6            | expert       |
| 2      | 6            | friend       |
| 3      | 7            | expert       |
| 4      | 8            | expert       |
----------------------------------------


expert
----------------------------------
|id      | lastname | firstname  |
----------------------------------
| 6      | Polo     |  Marco     |
| 7      | Wayne    |  John      |
| 8      | Smith    |  Brad      |
----------------------------------

friend
----------------------------------
|id      | lastname | firstname  |
----------------------------------
| 6      | Doe      |  John      |
| 7      | Brown    |  Jerry     |
| 8      | Goofy    |  Doofy     |
----------------------------------

我想获得所有建议(有些来自专家,有些来自朋友),并将他们各自的姓氏和名字作为结果集的一部分。

每个建议行都有通过 id 和类型与其关联的参考表(专家表、朋友表)。

所以我想有一个基于 id 的结果,但取决于查询哪个表的类型

结果看起来像这样结合参考表中的姓氏和名字,取决于它是专家还是朋友。

advices (array)
----------------------------------------------------------------
|id      | advisor_id   | advisor_type   | lastname | firstname |
-----------------------------------------------------------------
| 1      | 6            | expert         | Polo     | Marco     |
| 2      | 6            | friend         | Doe      | John      |
| 3      | 7            | expert         | Wayne    | John      |
| 4      | 8            | expert         | Smith    | Brown     |
-----------------------------------------------------------------

在非编程的简单单词术语中,我想创建一个这样的查询。

   SELECT 
   advices.id, advices.advisor_id, advices.type
 
   IF advices.type==expert THEN expert.lastname, expert.firstname
   ELSE IF advices.type==friend THEN friend.lastname, friend.firstname

   FROM advices, expert, friend

显然我知道 SELECT 语句不允许这种类型的动态逻辑。 但这可以用另一种方式完成吗?

这应该有效:

SELECT a.*, e.firstname, e.lastname 
FROM advices AS a 
INNER JOIN expert AS e ON a.advisor_id = e.id AND a.advisor_type = 'expert'
UNION
SELECT a.*, f.firstname, f.lastname
FROM advices AS a 
INNER JOIN friend AS f ON a.advisor_id = f.id AND a.advisor_type = 'friend'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM