Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在一个表中创建一个select语句,其中两个外键指向两个不同的表_Sql_Sqlite - Fatal编程技术网

Sql 如何在一个表中创建一个select语句,其中两个外键指向两个不同的表

Sql 如何在一个表中创建一个select语句,其中两个外键指向两个不同的表,sql,sqlite,Sql,Sqlite,我有3个表,其中一个表(itemtag)有两列,每个列都有一个外键,指向其他2个表(item和tag)中的每一个。我试图找出如何使用与其他表之一对应的值,针对包含fk的表创建一个select语句 表格:项目 | itemid | name | | -------- | -------------- | | 1 | chair | | 2 | table | 表格:标签 | tagid | name

我有3个表,其中一个表(itemtag)有两列,每个列都有一个外键,指向其他2个表(item和tag)中的每一个。我试图找出如何使用与其他表之一对应的值,针对包含fk的表创建一个select语句

表格:项目

| 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语句,但是它一直出错,所以我认为我的语法错误。如果它解决了您的问题,那么您可以接受这个答案,这样这个问题就标记为已解决。