1

我有一个这样的mysql表:

尼德|  视频|  时间

我正在尝试获取一个nid值列表,其中tid19 AND中的任何值53, 16 or 89。根据当前表,我希望查询返回10=19第 4 行)和IN (53,16,89)(最后一行)。

我可以将其作为 2 个单独的查询,如下所示:

SELECT nid FROM {term_node} WHERE tid IN (53,16,89)

SELECT nid FROM {term_node} WHERE tid = 19

(term_node 是屏幕截图中的表格)。我在这个应用程序中使用 PHP,所以我可以结合这 2 个查询的结果来获得所需的结果(即 10)。但我认为可能有一种方法可以从单个数据库查询中获取此信息。

我读过关于 Union 的文章,但老实说,我不知道如何使用它。我希望我对这个问题很清楚,并提前非常感谢你。

4

2 回答 2

3

AUNION在这里帮不了你。你想要的是一个十字路口。有些数据库有一个INTERSECT关键字可以做你想做的事,但不幸的是 MySQL 没有。

您可以通过使用内部连接来获得所需的内容:

SELECT DISTINCT TN1.nid
FROM term_node AS TN1
JOIN term_node AS TN2
ON TN1.nid = TN2.nid
AND TN2.tid = 19
WHERE TN1.tid IN (53, 16, 89)

在线查看它:sqlfiddle

于 2012-08-18T19:50:47.753 回答
2

您不需要任何联合,这可以通过在 WHERE 中添加所有 tid 轻松完成 试试这个

SELECT nid FROM {term_node} WHERE tid IN (53,16,89, 19)
于 2012-08-18T19:53:49.877 回答