SQL - поставлен в тупик на SELECT - пожалуйста, помогите! - PullRequest
0 голосов
/ 29 декабря 2010

Я пытаюсь добиться следующего в SQL Server 2005:

SELECT (IF EITHER EXISTS) usr.username, pro.email
FROM table1 AS usr, table2 AS pro
WHERE usr.username = 'existing_username'
AND / OR
pro.email = 'existing_email'

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

Так что он вернется ко мне: имя пользователя, электронная почта, оба или нет

Возможно ли это?

Ответы [ 6 ]

3 голосов
/ 29 декабря 2010

Предложение WHERE позволяет указать OR.

SELECT username, email FROM table WHERE username = @username OR email = @email
1 голос
/ 29 декабря 2010

Не совсем понятно, чего вы хотите.Так как вы не присоединяетесь к столам, я предполагаю, что вы действительно хотите объединить два

SELECT 
       usr.UserName foo
FROM
     table1 AS usr
WHERE
    usr.username = 'existing_username'
UNION ALL SELECT 
       pro.email foo
FROM
     table2 AS pro
WHERE
    pro.email = 'existing_email'

Если вы хотите знать, откуда оно, вы можете сделать

SELECT 
       usr.UserName foo,
       'usr' source
FROM
     table1 AS usr
WHERE
    usr.username = 'existing_username'
UNION SELECT 
       pro.email foo
      'email' source
FROM
     table2 AS pro
WHERE
    pro.email = 'existing_email'
1 голос
/ 29 декабря 2010

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

SELECT * FROM Usernames, Emails WHERE Usernames.Name = 'username' OR Emails.Email = 'email'
0 голосов
/ 29 декабря 2010
select usr.username, pro.email
from table1 as usr
inner join table2 as pro on
  usr.id = pro.userId --I'm guessing on the relationship here
where 
  usr.usrname = 'existing_username' or
  pro.email = 'existing_email'

Кроме того, вы можете объединить результаты из обеих таблиц вместе:

(select username, null as email from table1)
union
(select null as username, email from table2)

Объединение даст вам результаты, если у вас нет связи между таблицами.

0 голосов
/ 29 декабря 2010

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

Ссылка на этот пост может быть вам поможет. Булева логика

0 голосов
/ 29 декабря 2010

Две таблицы или два столбца в одной таблице?

Если последнее, сработает ли это?

"SELECT * from the_table WHERE email = '".$input_text."' OR username = '".$input_text."'";

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

Если только две таблицы не имеют отношения fk, в этом случае вы можете написать один запрос и использовать оператор JOIN.

...