Sql 艰难地编写我的第一个连接查询
我有三张桌子,我试着在下面摆出来。我被困住了。我没有做过很多查询,以前从未做过连接,我真的很困惑如何做到这一点。我的一个查询示例是简单的英语 从web\u design=“1”所在的技能区域获取所有公文包\u项目\u ID, 然后使用公文包项目id的id值从公文包项目中获取所有行 然后,对于每一行,从标签中获取行,其中portfolio_item_id等于portfolio_item_id,illustrator、photoshop或css中的一个值为1 我设法提出了一个问题Sql 艰难地编写我的第一个连接查询,sql,Sql,我有三张桌子,我试着在下面摆出来。我被困住了。我没有做过很多查询,以前从未做过连接,我真的很困惑如何做到这一点。我的一个查询示例是简单的英语 从web\u design=“1”所在的技能区域获取所有公文包\u项目\u ID, 然后使用公文包项目id的id值从公文包项目中获取所有行 然后,对于每一行,从标签中获取行,其中portfolio_item_id等于portfolio_item_id,illustrator、photoshop或css中的一个值为1 我设法提出了一个问题 选择投资组合项目
选择投资组合项目标识 来自技能领域 其中网页设计=1
选择* 来自投资组合项目 其中p.id=s.portfolio\u item\u id
选择* 来自标签t 其中s.portfolio\u item\u id=t.portfolio\u item\u id
所以我认为这是正确的,我现在必须把它结合起来
组合项目 身份证 项目名称 描述 技能领域 投资组合\项目\ id 网页设计 品牌 印刷品 标签 投资组合\项目\ id 插图画家 photoshop css试试这个:
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'
试试这个:
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'
下面是这样一个查询的样子。我试图逐字翻译你的英语变体,以帮助你理解,并包括注释来描述STPE
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"
下面是这样一个查询的样子。我试图逐字翻译你的英语变体,以帮助你理解,并包括注释来描述STPE
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"
分步骤进行分解,就像你在“简明英语”中所说的那样:
select * from skill_area where web_design = '1'
select *
from skill_area s, portfolio_items p
where web_design = '1'
and p.id = s.portfolio_item_id
分步骤进行分解,就像你在“简明英语”中所说的那样:
select * from skill_area where web_design = '1'
select *
from skill_area s, portfolio_items p
where web_design = '1'
and p.id = s.portfolio_item_id
他不想从你这里得到一切!我还应该提到,我需要能够在tags值为1的情况下获得列名,相应的结果是否包含列名的详细信息?
tags
表是否有id字段?不,我认为它不需要id字段,只需要公文包项目的id。他不想从Sthank you那里得到一切!我还应该提到,我需要能够在tags值为1的情况下获取列名,相应的结果是否包含列名的详细信息?tags
表是否有id字段?不,我认为它不需要,只需要公文包的id。\u items谢谢!我还应该提到,我需要能够在标记值为1的情况下获取列名,相应的结果是否会包含列名的详细信息?我明白了,所以您不希望这三个列(值为0,0,1)具有列名。。。请稍等。不,我希望列名中的value=“1”作为resultYeah的一部分,但这并不容易。你可以用一个案例来解决这个问题,当结构(一种或另一种,我设计它的方式不是“最好的”)来解决这个问题。@Nicola我不确定你的实际数据是什么样子的,所以当对子标签使用左连接时,也许你会得到正确的结果。或者,如果标签中的条目中没有带“1”的列,则需要在标签的之后添加“where illustrator='1'或photoshop='1'或css='1'”,
谢谢!我还应该提到,我需要能够在标记值为1的情况下获取列名,相应的结果是否会包含列名的详细信息?我明白了,所以您不希望这三个列(值为0,0,1)具有列名。。。请稍等。不,我希望列名中的value=“1”作为resultYeah的一部分,但这并不容易。你可以用一个案例来解决这个问题,当结构(一种或另一种,我设计它的方式不是“最好的”)来解决这个问题。@Nicola我不确定你的实际数据是什么样子的,所以当对子标签使用左连接时,也许你会得到正确的结果。或者,如果标签中的条目中没有带“1”的列,则需要在标签的之后添加“where illustrator='1'或photoshop='1'或css='1'”,
我正在阅读这些内容,并尝试遵循逐步的说明,这样做会更简单!我想这些字母是表格的缩写吧?在数字3中,它开始选择t,那么t在任何地方都没有定义,那么它如何知道它是什么呢?是的,字母是缩写(它们被称为别名)。再近一点看…'“t”是“tags”的别名。哦,我明白了,这样就可以在查询中进一步定义它了?我认为它是按照陈述的顺序进行的。@VinodKurup啊哦,我差不多讲到了最后,现在的问题是我说value=1让人们感到困惑,我的意思是:检索所有的列名,这些列名的字段包含该公文包的1\u item\u idHmmm。。。使用简单的DB查询来获取列“名称”(相对于值)并不是那么容易。要么使用@AngeloNeuschitzer的答案,要么在得到查询结果后再执行这一步。我只是在通读这篇文章,试图遵循一步一步的说明,这样做会更简单!我想这些字母是表格的缩写吧?在数字3中,它启动sele