Как бы я вытащил данные из двух таблиц, используя одну переменную, которая есть в обеих таблицах? - PullRequest
0 голосов
/ 01 февраля 2011

Допустим, у меня есть переменная 'userid', которую я хочу выбрать из таблиц aspnet_Membership и aspnet_AccountProfile.У них обоих есть идентификатор пользователя столбца, я просто хочу иметь возможность сделать оператор, такой как SELECT * FROM aspnet_AccountProfile, aspnet_Membership WHERE UserId = @ UserId, и он получает записи с соответствующим идентификатором пользователя для ОБА таблиц.Как мне это сделать?Спасибо!

Ответы [ 5 ]

2 голосов
/ 01 февраля 2011

Это называется JOIN:

Существует несколько основных типов объединения, основанных на том, какие именно данные вам нужны.Они связаны с теорией множеств / реляционной алгеброй.Я перечислю наиболее распространенные из них:

INNER JOIN

Используйте это, если вы хотите вернуть каждую возможную комбинацию строк, где обе таблицы имеют совпадающий UserId.Некоторые строки в таблице либо могут не возвращаться во внутреннем объединении.

SELECT * FROM aspnet_AccountProfile INNER JOIN aspnet_Membership
ON aspnet_AccountProfile.UserId = aspnet_Membership.UserId

Другой способ написания ВНУТРЕННЕГО СОЕДИНЕНИЯ (который я не рекомендовал бы, если вы хотите понимать объединения)is:

SELECT * FROM aspnet_AccountProfile, aspnet_Membership
WHERE aspnet_AccountProfile.UserId = aspnet_membership.UserId

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

AND aspnet_AccountProfile.UserId = @UserId

ИЛИ

И aspnet_Membership.UserId = @ UserId

Любой из этих двух вариантов будет работать нормально для внутреннего объединения.

СЛЕДУЮЩЕЕ НАРУЖНОЕ СОЕДИНЕНИЕ

Используйте это, если вы хотите вернуть все строк из первой таблицы в вашем запросе и каждую комбинацию, где UserId во второй таблице соответствует первой.Некоторые строки во второй таблице (в данном случае членство) могут вообще не возвращаться.

SELECT * FROM aspnet_AccountProfile LEFT JOIN aspnet_Membership
ON aspnet_AccountProfile.UserId = aspnet_Membership.UserId

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

WHERE aspnet_AccountProfile.UserId = @ UserId

RIGHT OUTER JOIN

Это довольно редко, поскольку обычнозаписывается как левое внешнее соединение.Это похоже на левое внешнее объединение, но вместо первой возвращаются все строки из второй таблицы отношения.

SELECT * FROM aspnet_AccountProfile RIGHT JOIN aspnet_Membership
ON aspnet_AccountProfile.UserId = aspnet_Membership.UserId

FULL OUTER JOIN

Используйте этоесли вам нужно связать все строки с соответствующим UserId в AccountProfile с соответствующими строками в Membership, но также необходимо знать, какие строки в таблице или не имеют совпадений в другой.

SELECT * FROM aspnet_AccountProfile FULL OUTER JOIN aspnet_Membership
ON aspnet_AccountProfile.UserId = aspnet_Membership.UserId

Получение результатов только для одного пользователя немного сложнее в FULL OUTER JOIN.Вы должны указать, что NULL или правильное значение допустимо в любой таблице.

0 голосов
/ 01 февраля 2011

Для этого вы можете использовать простое внутреннее соединение.

0 голосов
/ 01 февраля 2011

Вы можете сделать это внутренним соединением.

Вот пример,

 Select aspnet_Membership.*, aspnet_AccountProfile.* from aspnet_AccountProfile 
inner join aspnet_Membership on aspnet_Membership.userid = aspnet_AccountProfile.userid 
where aspnet_Membership.UserId=@UserId

При этом будет получена только запись о том, что идентификатор пользователя является общим в обеих таблицах.

Если вы хотите получить запись, которая находится в 1 таблице и может быть, а может и не быть в другой, то вы должны использовать левое соединение

то есть

 Select aspnet_Membership.*, aspnet_AccountProfile.* from aspnet_AccountProfile 
left join aspnet_Membership on aspnet_Membership.userid = aspnet_AccountProfile.userid 
where aspnet_Membership.UserId=@UserId
0 голосов
/ 01 февраля 2011

Вы можете использовать Join.

Что-то вроде:

Select * from aspnet_AccountProfile INNER JOIN aspnet_Membership
ON aspnet_AccountProfile.UserId = aspnet_Membership.UserId
Where aspnet_AccountProfile.UserId = @UserId

Спасибо,Vamyip

0 голосов
/ 01 февраля 2011

Привет,

Вы можете сделать это, используя

"SELECT * FROM aspnet_AccountProfile ap, aspnet_Membership m WHERE ap.UserId = m.UserId ANB ap.UserId=@UserId "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...