所以我有一个比较复杂的MySQL查询时给人一种重复列,原因我一直没能确定。我对SQL有点新鲜。重复列名称JOIN
查询应该参加的以“门票”专为特定id
的最新车票的数据库“问题”项目列表。因此,我有一个内部查询,它自己执行ticket
表的JOIN
以获取最新的票证。这工作正常。然后我试图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
最新票的表。
我试图解决这个问题的一件事是SELECT MAX.* FROM (
而不仅仅是SELECT * FROM (
。这消除了重复的列名错误,但内部查询不再返回任何other_data
或time_stamp
–我只得到id
和ticket_id
列。当然,这首先破坏了加入的目的。
由于'INNER JOIN',我相当肯定'max_id'和'cur_id'将永远是完全相等的,因此我可以检查两者之一。当然,在我的测试中似乎是这样。非常感谢! – KRyan
@KRyan这是正确的,并没有真正把所有的东西想进去,想回答快速,发生在我身上好几次最近,有人张贴快一点。在这种情况下,你应该删除其中一个条件,更新答案。你也不应该在连接内选择*,而只需要实际需要的最少数量的列,也可以删除重复的ID列并使查询速度更快。 – xception
我敢肯定的'SELECT *,因为我来自一个子查询只返回列我真正感兴趣的选择'是好的。我当然不会让* *不是'id'多列,'TICKET_ID ','other_data'和'time_stamp',即使我输出原始结果。 – KRyan