Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.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
Mysql 关于查询关系表的帮助_Mysql_Sql - Fatal编程技术网

Mysql 关于查询关系表的帮助

Mysql 关于查询关系表的帮助,mysql,sql,Mysql,Sql,我正在努力摆脱SQL技能的束缚,需要一些关于以下查询的帮助。我目前使用的数据库是mysql 我想检索分配了“tag2”和“tag4”的所有抽认卡。根据下面摘录中看到的现有表的内容,查询应返回两行:FlashCard_ID 1和2 我将如何表述这个查询?我已经有一段时间没有这样做了 mysql> select * from flashcard; +--------------+------------+----------+ | FLASHCARD_ID | QUESTION | ANS

我正在努力摆脱SQL技能的束缚,需要一些关于以下查询的帮助。我目前使用的数据库是mysql

我想检索分配了“tag2”和“tag4”的所有抽认卡。根据下面摘录中看到的现有表的内容,查询应返回两行:FlashCard_ID 1和2

我将如何表述这个查询?我已经有一段时间没有这样做了

mysql> select * from flashcard;
+--------------+------------+----------+
| FLASHCARD_ID | QUESTION   | ANSWER   |
+--------------+------------+----------+
|            1 | Question 1 | Answer 1 |
|            2 | Question 2 | Answer 2 |
|            3 | Question 3 | Answer 3 |
+--------------+------------+----------+
3 rows in set (0.00 sec)

mysql> select * from tag;
+--------+------+
| TAG_ID | NAME |
+--------+------+
|      1 | tag1 |
|      2 | tag2 |
|      3 | tag3 |
|      4 | tag4 |
|      5 | tag5 |
+--------+------+
5 rows in set (0.00 sec)

mysql> select * from flashcard_tags;
+--------+--------------+
| TAG_ID | FLASHCARD_ID |
+--------+--------------+
|      2 |            1 |
|      3 |            1 |
|      4 |            1 |
|      2 |            2 |
|      4 |            2 |
|      5 |            2 |
+--------+--------------+
6 rows in set (0.00 sec)

下面是另一个有效的查询。这个不使用子查询,这是我在Hibernate代码中使用的

select  fc.FLASHCARD_ID, 
        fc.QUESTION, 
        fc.ANSWER
from    FLASHCARD fc
            inner join FLASHCARD_TAGS fc_t
                on fc.FLASHCARD_ID=fc_t.FLASHCARD_ID 
            inner join TAG t 
                on fc_t.TAG_ID=t.TAG_ID
where   t.Name in ('tag2', 'tag4')
group by fc.FLASHCARD_ID 
having count(t.TAG_ID)=2

谢谢这很有效。我想知道有没有可能不使用Having子句就可以实现它?我们可以使用下面的查询吗?如果我做错了什么,请纠正我。从flashcards\u标记中选择flashId,其中标记\u id=2,然后退出从flashcards\u标记中选择flashId,其中标记\u id=4@Sandeep:您的子查询不相关。感谢您的回复,但我无法使此查询返回任何结果rows@Justin:那是因为一开始我弄错了,对不起。现在应该没问题了。
SELECT f.*
FROM flashcard f
  INNER JOIN flashcard_tags ft1 ON f.FLASHCARD_ID = ft1.FLASHCARD_ID
  INNER JOIN tag t1 ON ft1.TAG_ID = t1.TAG_ID AND t1.NAME = 'tag2'
  INNER JOIN flashcard_tags ft2 ON f.FLASHCARD_ID = ft2.FLASHCARD_ID
  INNER JOIN tag t2 ON ft2.TAG_ID = t2.TAG_ID AND t2.NAME = 'tag4'
select  fc.FLASHCARD_ID, 
        fc.QUESTION, 
        fc.ANSWER
from    FLASHCARD fc
            inner join FLASHCARD_TAGS fc_t
                on fc.FLASHCARD_ID=fc_t.FLASHCARD_ID 
            inner join TAG t 
                on fc_t.TAG_ID=t.TAG_ID
where   t.Name in ('tag2', 'tag4')
group by fc.FLASHCARD_ID 
having count(t.TAG_ID)=2