そのため、私は比較的複雑なMySQLクエリを使用しており、理由を特定できませんでした。私はSQLに少し慣れていません。
クエリは、「問題のある」エントリのリストを「チケット」のデータベース、具体的には特定のの最新のチケットと結合することになっていますid。したがって、最新のチケットを取得するためにテーブル自体をJOIN実行する内部クエリがあります。ticketこれは正しく機能します。JOIN次に、データベースを使用してこの内部選択を試みますが、これが参加している列名であるにもかかわらず、problem重複する列名を取得します。id私の理解では、特定の列に参加するとき、それは重複として「カウント」されるべきではありません...
とにかく、クエリ:
SELECT * FROM `problem` P
LEFT JOIN (
SELECT * FROM (
SELECT id, MAX(ticket_id) AS ticket_id
FROM `ticket`
WHERE ticket_status = 'o'
GROUP BY id
) AS MAX
INNER JOIN (
SELECT id, ticket_id, other_data, time_stamp FROM `ticket`
) CUR ON MAX.id = CUR.id AND MAX.ticket_id = CUR.ticket_id
) T ON P.id=T.id
WHERE
P.since IS NOT NULL;
私が言ったように、私がこれをするなら:
SELECT * FROM (
SELECT id, MAX(ticket_id) AS ticket_id
FROM `ticket`
WHERE ticket_status = 'o'
GROUP BY id
) AS MAX
INNER JOIN (
SELECT id, ticket_id, other_data, time_stamp FROM `ticket`
) CUR ON MAX.id = CUR.id AND MAX.ticket_id = CUR.ticket_id
それぞれの最新チケットの表を入手しますid。
私がこれを修正しようとしたことの1つはSELECT MAX.* FROM (、単なるではなく修正することですSELECT * FROM (。これにより、重複する列名エラーは排除されますが、内部クエリはother_dataorまたはtime_stamp–列のみをid返しticket_idます。もちろん、これはそもそも参加の目的を打ち破ります。