2017-10-05 32 views
0

と互換性がありません。私はテーブルを持って、次の列を持つmonitor_linksと呼ば:GROUP BYは= ONLY_FULL_GROUP_BY」sql_modeの

Image of my Table

この表は、他のウェブサイトからのリンクを格納するために使用されます。

SELECT title, url 
FROM monitor_links 
WHERE id_domain = 5 
GROUP BY url 
ORDER BY date_created asc 

このクエリでは、ストレージリンク(id_domainが5の場合)からタイトルとURLを返します。しかし、私の場合は、同じURLと同じ行を返すことはできませんURL私はGROUP BY urlを使用しています。 (同じURLとid_domain = 5を持つ複数の行が存在する場合、私のコードはこの行のうちの1つだけを返します)。

Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'shuri.monitor_links.title' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by'.

一部の人々は私がonly_full_group_by無効にしてみてくださいと言ったが、私は警告をサイレンシングするのではなく、私のクエリを修正したい:

問題は、私は次のエラーを取得していますということです。

+0

「url」は同じですが、異なる「title」値を持つエントリが2つあるとどうなりますか? –

+0

[MySqlでクエリを実行するときに\ _full \ _group \ _byのみに関連するエラー]の可能な重複があります。(https://stackoverflow.com/questions/34115174/error-related-to-only-full-group-by-when -executing-a-query-in-mysql) –

+0

@AlexMcMillan Nothing ...クエリで無視されます –

答えて

1

あなたはその後、各urlに1つtitleをしたい場合:

SELECT MAX(title) as title, url 
FROM monitor_links 
WHERE id_domain = 5 
GROUP BY url ; 

あなたが最新のバージョン場合:

SELECT ml.* 
FROM monitor_links ml 
WHERE ml.created_date = (SELECT MAX(ml2.created_date) 
         FROM monitor_links ml2 
         WHERE ml2.url = ml.url AND ml2.id_domain = ml.id_domain 
         ); 
2

をあなたがしたいとMySQLを伝えるためにANY_VALUE機能を使用することができますグループ内の任意の値を返します。

SELECT ANY_VALUE(title) AS title, url 
FROM monitor_links 
WHERE id_domain = 5 
GROUP BY url 

これは、基本的にONLY_FULL_GROUP_BYをこのクエリでオフにすることと同じです。

関連する問題