0

我有 3 张桌子,我试图在下面布置。我已经卡住了。我没有做很多查询,以前从未做过联接,我真的很困惑如何做到这一点。我会用简单的英语进行示例查询,

从 web_design="1" 的 Skill_area 中获取所有的投资组合项目 ID,然后从投资组合项目中获取所有具有投资组合项目 ID 值的行,然后对于每一行,从投资组合项目 ID 等于投资组合项目 ID 和插画家之一的值的标签中获取行, photoshop 或 css 是 1。

QUERY我设法想出


选择投资组合_项目_id

FROM技能区域

哪里web_design=1


选择*

FROM投资组合项目 p

WHERE p.id= s.portfolio_item_id


选择*

FROM标记 t

WHERE s.portfolio_item_id=t.portfolio_item_id


所以我认为这是正确的,我现在必须加入它


投资组合项目

ID

项目名称

描述

技能领域

投资组合项目 ID

网页设计

品牌推广

打印

标签

投资组合项目 ID

插画家

Photoshop

css

4

4 回答 4

2

像你在“简单的英语”声明中那样,分步分解它:

  1. 获取 web_design Skill_area 的

    select * from skill_area where web_design = '1'
    
  2. 加入portfolio_items

    select * 
     from skill_area s, portfolio_items p 
     where web_design = '1' 
       and p.id = s.portfolio_item_id
    
  3. 加入标签,选择 value=1 的行并仅返回标签表中的列)

    select t.* 
     from skill_area s, portfolio_items p, tags t 
     where web_design = '1' 
       and p.id = s.portfolio_item_id
       and p.id = t.portfolio_item_id
       and t.value = '1'
    
于 2012-05-03T16:24:00.600 回答
1

试试这个:

SELECT sa.portfolio_item_id, pi.*, subtags.*
FROM skill_area sa
INNER JOIN portfolio_items pi ON sa.portfolio_item_id = pi.id
INNER JOIN (SELECT CASE WHEN illustrator = '1' THEN 'illustrator' 
                        WHEN photoshop = '1' THEN 'photoshop' 
                        ELSE 'css' END as tag, portfolio_item_id 
            FROM tags) subtags ON sa.portfolio_item_id = subtags.portfolio_item_id
WHERE sa.web_design = '1'

您评论说您希望有一个替代方案,您只需从标签中获取所有列。

SELECT sa.portfolio_item_id, pi.*, tags.*
FROM skill_area sa
INNER JOIN portfolio_items pi ON sa.portfolio_item_id = pi.id
INNER JOIN tags ON sa.portfolio_item_id = tags.portfolio_item_id
WHERE sa.web_design = '1'
于 2012-05-03T16:15:04.290 回答
0
SELECT      P.*
FROM        SkillArea S
INNER JOIN  Portfolio P ON S.portfolio_item_id = P.id
INNER JOIN  Tags T ON T.portfolio_item_id = P.id
WHERE       S.web_design = 1
AND         P.id = 1
于 2012-05-03T16:15:07.690 回答
0

这是这样一个查询的样子。我试图逐字翻译您的英文变体以帮助您理解,并包含注释来描述 stpes。

select s.portfolio_item_id, p.*, t.*
from Skill_Area s                                 -- get all portfolio_item_ids from skill_area
inner join Portfolio_Items p on                   -- then get all the rows from portfolio_items
    p.portfolio_item_ids = s.portfolio_item_ids   -- with the id values of portfolio_item_ids
inner join Tags t on                              -- then for each row, get the row from tags
    t.portfolio_item_id = p.portfolio_item_id     -- where portfolio_item_id is equal to portfolio_item_id
    and t.portfolio_item_id = 1                   -- and the value of it is 1
where s.web_design = "1"                          -- where web_design = "1"
于 2012-05-03T16:22:56.217 回答