Ради повышения скила и проверки себя на прочность решал повыполнять тестовые задания.
Взял задания от *однойоченьизвестнойкомпании* по MYSQL
Цитата |
Есть таблица товаров. CREATE TABLE `goods` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(64) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 Она содержит следующие значения. `id` `name` 1 Яблоки 2 Яблоки 3 Груши 4 Яблоки 5 Апельсины 6 Груши Напишите запрос, выбирающий уникальные пары `id` товаров с одинаковыми `name`, например: (1,2), (4,1), (2,4), (6,3) При решении задачи необходимо учесть, что пары (x,y) и (y,x) — одинаковы. Приведите несколько вариантов решения задачи, какой вариант будет работать быстрее? Почему? |
SELECT
g1.id AS l_id,
g2.id AS r_id
FROM
goods AS g1
INNER JOIN
goods AS g2
ON
g1.name = g2.name AND
g1.id < g2.id;
SELECT
g1.id AS l_id,
g2.id AS r_id
FROM
goods AS g1
LEFT JOIN
goods AS g2
ON
g1.name = g2.name AND
g1.id < g2.id
WHERE
g2.id IS NOT NULL;
SELECT
g1.id AS l_id,
g2.id AS r_id
FROM
goods AS g1,
goods AS g2
WHERE
g1.name = g2.name AND
g1.id < g2.id;
CREATE TABLE IF NOT EXISTS `goods` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(64) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `goods` (`id`, `name`) VALUES
(1, 'Яблоки'),
(2, 'Яблоки'),
(3, 'Груши'),
(4, 'Яблоки'),
(5, 'Апельсины'),
(6, 'Груши');