mysql - 如何选择未回答的问题?

标签 mysql sql self-join

我有一个这样的表:

CREATE TABLE `qanda` (
  `id` int(11) UNSIGNED NOT NULL,
  `subject` varchar(150) COLLATE utf8_unicode_ci NOT NULL,
  `body` text COLLATE utf8_unicode_ci NOT NULL,
  `body_html` text COLLATE utf8_unicode_ci NOT NULL,
  `related` int(11) UNSIGNED DEFAULT NULL,
  `type` tinyint(1) NOT NULL,
  `amount` decimal(11,0) DEFAULT NULL,
  `closed` tinyint(1) UNSIGNED DEFAULT NULL,
  `CloserId` varchar(500) COLLATE utf8_unicode_ci NOT NULL,
  `AcceptedAnswer` tinyint(1) DEFAULT NULL,
  `aadate` int(11) UNSIGNED DEFAULT NULL,
  `category` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
  `keywords` varchar(150) COLLATE utf8_unicode_ci NOT NULL,
  `visibility` tinyint(1) NOT NULL,
  `author_id` int(11) UNSIGNED DEFAULT NULL,
  `editor_id` int(11) UNSIGNED DEFAULT NULL,
  `date_time` int(11) UNSIGNED NOT NULL,
  `edited_at` int(11) UNSIGNED DEFAULT NULL,
  `activated_at` int(11) UNSIGNED DEFAULT NULL,
  `activated_story` enum('سوال شده','ویرایش شده','جواب داده شده','') COLLATE utf8_unicode_ci NOT NULL,
  `activator_id` int(11) UNSIGNED DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

该表存储问题和答案。这是我当前的查询,它提供了所有问题的列表,并根据投票对它们进行排序:

SELECT *, (SELECT COALESCE(sum(vv.value),0)
           FROM votes vv
           WHERE qanda.id = vv.post_id) AS total_votes
FROM qanda
WHERE type = 0 -- "type=0" means questions
ORDER BY total_votes DESC
LIMIT :j,11;

现在我需要在 WHERE 子句上添加一个条件来排除有答案的问题。我想我需要一个自加入。但我不知道如何在 where 子句上编写 join 。有什么建议吗?

最佳答案

使用NOT IN排除已回答的ID:

SELECT *, (SELECT COALESCE(sum(vv.value),0)
           FROM votes vv
           WHERE qanda.id = vv.post_id) AS total_votes
FROM qanda
WHERE type = 0
AND id NOT IN (SELECT related FROM quanda WHERE type <> 0)
ORDER BY total_votes DESC
LIMIT :j,11;

关于mysql - 如何选择未回答的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44202471/

相关文章:

sql - 在 SQL 中向 View 添加新列

sql - 序数使用哪种数据类型?

MYSQL self join get row based on MAX 并具有

mysql - 如何避免在 MySQL 中导致对称结果的自连接?

php - 使用 wampserver 获取空数据库

MySQL 使用子查询代替 JOIN

MySQL 5.6 Workbench 和 my.ini

php - 将数组插入数据库表

php - 使用 Yii Framework 在数据库中查询日期时间类型的字段。我只需要按日期查询

mysql - 自连接的 SQL 查询