加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

具有多个连接的SQLite查询

发布时间:2020-12-12 19:06:02 所属栏目:百科 来源:网络整理
导读:我相信这只是一个简单的连接状态.我最近没有使用SQL,似乎忘记了如何做到这一点.我所拥有的是一个带有几列的项目,它引用另一个表格作为该字段的名称.像这样 id,name,effect1,effect2,effect3,effect4 效果引用另一个只有a和id和name列的表.我想要做的是运行一
我相信这只是一个简单的连接状态.我最近没有使用SQL,似乎忘记了如何做到这一点.我所拥有的是一个带有几列的项目,它引用另一个表格作为该字段的名称.像这样
id,name,effect1,effect2,effect3,effect4

效果引用另一个只有a和id和name列的表.我想要做的是运行一个查询,为每个效果提取这些名称

就像是

SELECT i.name,e.name AS effect1,e.name AS effect2,e.name AS effect3,e.name AS effect4 FROM item i,effects e WHERE i.effect1 = e.name AND i.effect2 = e.name AND i.effect3 = e.name AND i.effect4 = e.name

所以,假设我有一个像这样的值的项目

Toast,1,2,3,4

而且效果是

1,burned
2,untoasted
3,wet
4,texas

我想要它展示烤面包,烧烤,烤,湿,德州

和想法?

更新

Table items
id,weight,value,effect4

Table effects
id,name

在effect1中,…列是效果表中相应项目的ID号.很多项目将共享相同的效果,因此我决定使用连接来节省空间,而不是使用冗余数据来扩充这个已经很大的数据库.与此同时,我设法忘记这样做,哈哈

更新#2
这是我想要的效果,但不止一个效果列

SELECT i.name,i.weight,i.value,e.name AS 'effect 1' FROM ingredients i JOIN effects e ON effects._id=i.effect1

这适用于1,但如果我尝试做多次,它只会崩溃.任何想法我如何能够为所有4种效果获得这种效果?

每个列都需要一个独特的连接:
SELECT i.name,e1.name AS effect1,e2.name AS effect2,e3.name AS effect3,e4.name AS effect4
FROM   ingredients i 
LEFT   JOIN effects e1 ON e1.id = i.effect1
LEFT   JOIN effects e2 ON e2.id = i.effect2
LEFT   JOIN effects e3 ON e3.id = i.effect3
LEFT   JOIN effects e4 ON e4.id = i.effect4

进行LEFT JOIN,以便在效果表中缺少任何效果时不会丢失该行.
此外,此查询依赖于effects.id是唯一的.

这是另一种做同样的方法:

SELECT i.name,(SELECT e.name FROM effects e WHERE e.id = i.effect1) AS effect1,(SELECT e.name FROM effects e WHERE e.id = i.effect2) AS effect2,(SELECT e.name FROM effects e WHERE e.id = i.effect3) AS effect3,(SELECT e.name FROM effects e WHERE e.id = i.effect4) AS effect4
FROM   ingredients i

关于数据库布局:

如果每种成分都有4种效果,那么db设计就可以了.如果效果的数量不同或每个效果都有其他信息,您可以考虑成分和效果之间的n:m关系,由附加表实现. (替换四个效果*列.)
看起来像这样:

CREATE TABLE ingredients_effects
(
  ingredients_id integer references ingredients(id),effects_id     integer references effects(id)
-- more attributes like quantity or notes?
);

fine manual has the details.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读