Sql 如何在一个表中创建一个select语句,其中两个外键指向两个不同的表
我有3个表,其中一个表(itemtag)有两列,每个列都有一个外键,指向其他2个表(item和tag)中的每一个。我试图找出如何使用与其他表之一对应的值,针对包含fk的表创建一个select语句 表格:项目Sql 如何在一个表中创建一个select语句,其中两个外键指向两个不同的表,sql,sqlite,Sql,Sqlite,我有3个表,其中一个表(itemtag)有两列,每个列都有一个外键,指向其他2个表(item和tag)中的每一个。我试图找出如何使用与其他表之一对应的值,针对包含fk的表创建一个select语句 表格:项目 | itemid | name | | -------- | -------------- | | 1 | chair | | 2 | table | 表格:标签 | tagid | name
| itemid | name |
| -------- | -------------- |
| 1 | chair |
| 2 | table |
表格:标签
| tagid | name |
| -------- | -------------- |
| 10 | kitchen |
| 11 | bedroom |
表格:itemtag
| itemid (fk to item.itemid) | tagid (fk to tag.tagid) |
| --------------------------- | ------------------------ |
| 1 | 10 |
| 2 | 10 |
| 2 | 11 |
在itemtag表中查询与给定项或标记表中的值相关的给定名称(如椅子)或标记(如厨房)的正确方法是什么?据我所知,我的这一陈述正在产生预期的结果,但这真的是正确的方法和/或实际产生准确的结果吗
select item.name
FROM item, tag, itemtag
WHERE itemtag.itemid = item.itemid
AND itemtag.tagid = tag.tagid
AND tag.name = 'kitchen'
在本例中,我希望项目名称带有“kitchen”标记。查看您的查询,它似乎必须生成准确的输出 <>但是您应该考虑使用标准ANSI连接如下:
select item.name, tag.name
FROM itemtag join item on itemtag.itemid = item.itemid
JOIN tag on itemtag.tagid = tag.tagid
WHERE tag.name = 'kitchen'
这个问题很好。或者你可以使用join语句,我个人觉得这更可读,但这纯粹是出于品味。这正是我想要的,谢谢。。我确实尝试了一些join语句,但是它一直出错,所以我认为我的语法错误。如果它解决了您的问题,那么您可以接受这个答案,这样这个问题就标记为已解决。