Не удалось выяснить SQL-запрос для связи обеих таблиц - PullRequest
0 голосов
/ 24 апреля 2018

Хорошо, у меня есть две таблицы.

Таблица 'topic'

tid | posts 
------------
1       4
3       2

Таблица 'posts'

topic_id |  post
-----------------
1      xxxx
3      aaaa
1      dddd
1      ddsdss
3      rreer
1      gsdsd

Мой абстрактный запрос выглядит так:

select counter(*) as c 
from posts as p, topic as t 
where p.tid = t.topicid 
  and c != t.posts

Это должно вернуть счетчик всех строк таблицы 'posts', который совпадает с tid таблицы 'topic', а также не совпадает со счетчиком сообщений Table 'topic'.

Также мне нужнообновите столбец "сообщений" темы значением счетчика (*), если он будет отличаться.

update topic set posts = (SELECT COUNT(*) from posts WHERE posts.topicid = topic.tid and topic.posts <> (SELECT COUNT(*) from posts WHERE posts.topicid = topic.tid))

Я пробовал много способов заставить это работать, но не смог выяснить.Был бы очень признателен, если кто-нибудь может объяснить запрос для этого случая?


На самом деле я пытаюсь сделать это.Я хочу обновить счетчик сообщений темы для всех соответствующих идентификаторов тем между таблицами, если количество сообщений в таблице «сообщений» не соответствует счетчику сообщений в таблице «тем».Вы меня понимаете?Я попытался поиграть с вашим запросом, но вместо этого он дает мне другие строки таблицы «Темы», чего я не хочу.

UPDATE topics SET posts = (
  SELECT COUNT(*) 
  FROM posts 
  WHERE topicid = (
    SELECT tid 
    FROM topics 
    WHERE topics.tid = topicid
 ) 
 GROUP BY topicid HAVING COUNT(*) <> (
   SELECT posts 
   FROM topics WHERE topics.tid = topicid
 )
) **WHERE tid = (
  SELECT topicid 
  FROM posts 
  WHERE topicid = (
    SELECT tid 
    FROM topics 
    WHERE topics.tid = topicid
  ) GROUP BY topicid HAVING COUNT(*) <> (
      SELECT posts FROM topics WHERE topics.tid = topicid
  )
)**

1 Ответ

0 голосов
/ 24 апреля 2018

Следующее даст вам тему и сосчитает

Если вы хотите найти «неправильные» темы, присоедините их к таблице подсчета

SELECT *
FROM topic
LEFT JOIN (
  SELECT topic_id, count(*) as t_count
  FROM posts
  GROUP BY topic_id
) sub on topic.tid  = sub.topic_id

Затем, чтобы увидеть те, которые отличаются, вы можете добавить где

WHERE topic.posts <> sub.t_count
...