Мне нужен запрос, разработанный для MySQL, переведенный для работы на SQL Server 2005 - PullRequest
0 голосов
/ 10 апреля 2010

Я потратил на это целый день, не понимая этого. Я надеюсь, что кто-нибудь может помочь мне перевести следующий запрос MySQL для работы для SQL Server 2005:

SELECT MAX ( messages.date ) AS maxdate,  
topics.id AS topicid, topics.*, users.*  
FROM messages, topics, users WHERE messages.topic_id  
= topics.id AND topics.user_id = users.id AND  
topics.forum_id = " . $forumid . " GROUP BY  
messages.topic_id ORDER BY maxdate DESC

$ forumid - это значение QueryString, определенное в следующем коде кода VB.NET:

forumName.Text = "<a href='ViewForum.aspx?forumid=" & row.id & "'>" & row.name & "</a>"

Я был бы очень признателен, если бы вы могли помочь.

Ответы [ 2 ]

1 голос
/ 10 апреля 2010

Есть две проблемы. Во-первых, как указала Андомар, вы не можете ссылаться на псевдонимы столбцов в ORDER BY.

Во-вторых, если вы выполняете агрегацию (например, MAX), вы не можете выбрать поля, которых нет в GROUP BY, если они также не агрегированы.

Я думаю, это то, что вы хотите:

SELECT m.maxdate, t.*, u.*
FROM (
    SELECT topic_id, MAX(messages.date) AS maxdate
    FROM messages
    GROUP BY topic_id
) AS m
    INNER JOIN topics t ON t.id = m.topic_id
    INNER JOIN users u ON t.user_id = u.id
WHERE t.forum_id = " . $forumid . "
ORDER BY m.maxdate DESC
1 голос
/ 10 апреля 2010

SQL Server не позволяет ссылаться на псевдонимы столбцов в order by (по крайней мере, 2005 не сделал.) Если вы замените порядок на:

ORDER BY MAX ( messages.date )

Вы должны быть на шаг ближе к рабочему запросу SQL Server 2005.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...