Как сделать так, чтобы при джойне значение поля с одинаковым именем из второй таблицы не перезаписывало значение из первой?

205
26 августа 2017, 02:01

Делаю выборку из двух таблиц с объединением:

SELECT * FROM `material` LEFT JOIN `material_group`

Мне нужно, чтобы в результате выборки id столбец был от первой таблицы. При такой выборке как в примере id поля есть у обоих таблиц и, соответственно, в результате объединения там единичка (1).

Я решаю этот вопрос так

SELECT `material`.* , 
    `material_group`.`namegroup`, 
    `material_group`.`tech` 
FROM `material` 

То есть, выбираю всю первую таблицу и перечисляю все столбцы второй, кроме id столбца второй, и все работает.

Но есть ли правило, по которому можно выбрать обе таблицы кроме одного столбца, что-то типа:

SELECT `material`.* , `material_group`,* (исключяя `material_group`,`id`)

Спасибо за ответ.

Answer 1

Мне нужно что бы в результате выборки id столбец был от первой таблице. При такой выборке как в примере id поля есть у обоих таблиц и соотвественно в результате объединения там единичка (1).

Если нужно не шашечки, а ехать, то

SELECT m.id as material_id, m.*, mg.* FROM material m LEFT JOIN material_group mg

Впрочем, кто нам мешает изменить порядок перезатирания? Мне кажется что сработает такой вариант

SELECT mg.*, m.* FROM material m LEFT JOIN material_group mg

В общем, в итоге самый простой вариант будет

SELECT *, material.id FROM material ...

поскольку перезапись происходит уже в PHP, и происходит тупо потому что в массиве не может быть двух элементов с одним и тем же индексом, самое последнее значение id перезапишет значение в итоговом массиве, полученном через fetch

Answer 2

Все работает

SELECT *, `material`.`id` as material_id FROM `material`
Answer 3

В запросах типа

SELECT material.* , material_group.*
FROM material.* , material_group
WHERE material.id = material_group.id

или

SELECT material.* , material_group.*
FROM material.* 
JOIN material_group ON material.id = material_group.id

поле id будет выведено дважды - для каждой таблицы.

Но если использовать форму

SELECT material.* , material_group.*
FROM material.* 
JOIN material_group USING (id)

то поле будет выведено только один раз. Правда, если поля имеют разные имена - увы...

UPD: Если поле связывания id не только одноимённое, но и единственное одноимённое, можно использовать

SELECT material.* , material_group.*
FROM material.* NATURAL JOIN material_group
READ ALSO
Когда надо использовать use для namespace?

Когда надо использовать use для namespace?

Заметил что Шторм выдаёт информацию что use не имеет эффекта никакого:

383
В mySQL не отправляются данные из формы

В mySQL не отправляются данные из формы

Почему-то данные из формы никак не хотят лететь в бд,даже при условии того,что отчаявшись, я просто копирую код из разных гайдов и делаю всё...

266
Изменение регулярного выражения php

Изменение регулярного выражения php

здравствуйте, есть регулярное выражение - '#\[b\](*?)\[/b\]#s', не подскажите как можн оего изменить, чтобы текст внутри него как бы trim'ился? то есть...

239