#mysql #sql
#mysql #sql
Вопрос:
У меня есть две таблицы, одна называется contacts, а другая называется numbers. В одной хранится контактная информация и выглядит следующим образом
contacts
-------------------------------------------------------
| id | fname | lname | email | address | uid | uniqid |
-------------------------------------------------------
Моя вторая таблица, в которой хранятся телефонные номера, принадлежащие определенному контакту, выглядит следующим образом
numbers
---------------------
| id | number | cid |
---------------------
Идентификатор cid совпадает с идентификатором uniqid в таблице contact, как я могу получить строку contact с ее номерами, которая находится во второй таблице, через mysql?
Обновить Исправление к правильному ответу
SELECT id ,fname ,lname ,email ,address , uid, uniqid,number
FROM contacts a
inner join (SELECT cid, GROUP_CONCAT(DISTINCT number SEPARATOR ',') number FROM numbers) b ON b.cid=a.uniqid
В нем отсутствовал ОТЧЕТЛИВЫЙ
Комментарии:
1. Покажите нам образцы данных для обеих таблиц, а также ожидаемый результат. Все в виде форматированного текста, а не изображений!
Ответ №1:
используйте join
select id ,fname ,lname ,email ,address , uid, uniqid,number
from contacts a
inner join numbers b on b.cid=a.uniqid
Комментарии:
1. Привет, спасибо за помощь, но, к сожалению, это создает другую строку, если есть другое число с тем же идентификатором uniqid
Ответ №2:
Вы можете использовать GROUP_CONCAT
для получения нескольких чисел в одной строке, а затем, когда вы подразумеваете объединение, вы не получите дубликатов.
select `id` ,`fname` ,`lname` ,`email` ,`address` , `uid`, `uniqid`,`number`
from `contacts` a
inner join (Select `cid`, GROUP_CONCAT(`number` seperator ',') `number` from `numbers`) b on b.cid=a.uniqid
Комментарии:
1. По какой-то причине не работает, я попытался использовать синтаксис с заглавной буквы. но ничего
2. не могли бы вы попробовать сейчас, я думаю, это потому, что number — это ключевое слово, поэтому заключите его и выполните.
Ответ №3:
Вы можете сопоставить два идентификатора, убедитесь, что у вас есть это как индекс таблицы, для более быстрого извлечения данных.
SELECT id ,fname ,lname ,email ,address , uid, uniqid, number from contacts a, number b WHERE a.uniqid = b.cid;
Комментарии:
1. Совет сегодняшнего дня: переключитесь на современный, явный
JOIN
синтаксис. Проще писать (без ошибок), легче читать (и поддерживать) и легче конвертировать во внешнее соединение, если это необходимо.
Ответ №4:
Просто используйте внутреннее соединение с n.cid = c.uniqid
select c.id,c.fname,c.lname,c.email,c.address,c.uid,c.uniqid,n.number
from contacts c
inner join numbers n
on n.cid = c.uniqid
Ответ №5:
использование join здесь является правильным выбором:
SELECT con.*,num.* from contacts as con inner join numbers as num on con.uniqid = num.cid
Ответ №6:
Здесь мы используем концепцию foreign key
. Вот cid
это foreign key
таблица контактов в таблице номеров. мы должны сопоставить primary key
of contact
table с внешним ключом number table. если обе совпадают, то отображается результат.
Select a.id, a.fname, a.lname, a.email, a.address,
a.uid, a.uniqid,b.number from contact a, number b where a.id=b.id;