честно говоря, совсем не понимаю, что с чем мы объединяем при: SELECT c1.name FROM city c1 INNER JOIN city c2 ON c1.name = c2.name WHERE c1.id c2.id; Потому что при: SELECT c1.name FROM city c1 INNER JOIN city c2 ON c1.name = c2.name WHERE c1.id c2.id ORDER BY c1.name; Вывод ... 6xSpringfield ... 2xZeleznogorsk при SELECT name FROM city WHERE name LIKE 'Springfield'; Вывод: Springfield Springfield Springfield при SELECT name FROM city WHERE name LIKE 'Zeleznogorsk'; Вывод: Zeleznogorsk Zeleznogorsk Теперь вопрос, что с чем мы объединяли? :) Ведь, по сути, должно быть тогда 6xSpringfield и 4xZeleznogorsk?
если пишете ON c1.name = c2.name, значит объединяете таблицу саму с собой. в таблице city присутствует 3xSpringfield. Когда вы объединяете таблицу city саму с собой, рассматриваются 3xSpringfield в одной и 3xSpringfield (те же самые) в другой. При объединении таблиц их записи сочетаются во всех вариантах, то есть где-то в памяти сервера получается условный набор: c1.id1 c2.id1 - c1.id1 c2.id2 + c1.id1 c2.id3 + c1.id2 c2.id1 + c1.id2 c2.id2 - c1.id2 c2.id3 + c1.id3 c2.id1 + c1.id3 c2.id2 + c1.id3 c2.id3 - Условный, потому что вместо реальных идентификаторов городов Springfield, указаны idN. Под условие c1.id c2.id попадают те записи, которые выделены знаком '+' (у них id разные),
@@HtmllabRu что странно так это каким образом "chcp 65001" связана с "UTF-8"? было бы логично сделать команду аля set_encrypting -cUTF-8 или типо такого