如何从条件中的两个不同列中进行选择,并从SQL中连接它们
我期待加入两列作为一个单一的。。。这里有一个想法如何从条件中的两个不同列中进行选择,并从SQL中连接它们,sql,join,Sql,Join,我期待加入两列作为一个单一的。。。这里有一个想法 ======================================================= id | firstname | lastname ======================================================= 1 | Peter | Das -----------------------------------------------
=======================================================
id | firstname | lastname
=======================================================
1 | Peter | Das
-------------------------------------------------------
2 | Das | James
-------------------------------------------------------
3 | vector | Call
______________________________________________________________
4 | cans | Das
sql查询应该如下所示(伪代码)
结果集应该是这样的
======================
name
======================
cans
---------------------------------------
James
---------------------------------------
Peter
现在谁能告诉我确切的问题是什么
每一个想法、提示和建议都是受欢迎的看起来像是一个工会的工作查询
SELECT id, firstName AS name
FROM table
WHERE lastName = 'Das'
UNION ALL
SELECT id, lastName AS name
FROM table
WHERE firstName = 'Das'
ORDER BY id DESC
看起来像是用于
联合
查询的作业
SELECT id, firstName AS name
FROM table
WHERE lastName = 'Das'
UNION ALL
SELECT id, lastName AS name
FROM table
WHERE firstName = 'Das'
ORDER BY id DESC
你没有告诉我们你桌子的名字。假设它被称为
mynames
,这应该可以工作:
select case when firstname = 'Das' then lastname
else firstname end as name from mynames
where lastname = 'Das' or firstname = 'Das' order by id desc;
下面是我在MySQL中编写的一些测试代码,用于验证解决方案是否有效:
mysql> create table mynames(
-> id int unsigned primary key auto_increment,
-> firstname varchar(32) not null,
-> lastname varchar(32) not null
-> ) engine=innodb;
Query OK, 0 rows affected (0.45 sec)
mysql> insert into mynames (firstname, lastname) values
-> ('Peter', 'Das'),
-> ('Das', 'James'),
-> ('vector', 'Call'),
-> ('cans', 'Das');
Query OK, 4 rows affected (0.49 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> select * from mynames;
+----+-----------+----------+
| id | firstname | lastname |
+----+-----------+----------+
| 1 | Peter | Das |
| 2 | Das | James |
| 3 | vector | Call |
| 4 | cans | Das |
+----+-----------+----------+
4 rows in set (0.00 sec)
mysql> select case when firstname = 'Das' then lastname
-> else firstname end as name from mynames
-> where lastname = 'Das' or firstname = 'Das' order by id desc;
+-------+
| name |
+-------+
| cans |
| James |
| Peter |
+-------+
3 rows in set (0.00 sec)
你没有告诉我们你桌子的名字。假设它被称为
mynames
,这应该可以工作:
select case when firstname = 'Das' then lastname
else firstname end as name from mynames
where lastname = 'Das' or firstname = 'Das' order by id desc;
下面是我在MySQL中编写的一些测试代码,用于验证解决方案是否有效:
mysql> create table mynames(
-> id int unsigned primary key auto_increment,
-> firstname varchar(32) not null,
-> lastname varchar(32) not null
-> ) engine=innodb;
Query OK, 0 rows affected (0.45 sec)
mysql> insert into mynames (firstname, lastname) values
-> ('Peter', 'Das'),
-> ('Das', 'James'),
-> ('vector', 'Call'),
-> ('cans', 'Das');
Query OK, 4 rows affected (0.49 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> select * from mynames;
+----+-----------+----------+
| id | firstname | lastname |
+----+-----------+----------+
| 1 | Peter | Das |
| 2 | Das | James |
| 3 | vector | Call |
| 4 | cans | Das |
+----+-----------+----------+
4 rows in set (0.00 sec)
mysql> select case when firstname = 'Das' then lastname
-> else firstname end as name from mynames
-> where lastname = 'Das' or firstname = 'Das' order by id desc;
+-------+
| name |
+-------+
| cans |
| James |
| Peter |
+-------+
3 rows in set (0.00 sec)
我想他可能只是在寻找一个普通的工会,而不是一个工会,因为他在样本集中没有返回任何副本。我只是在考虑不可避免的“Das Das”记录。我想他可能只是在寻找一个普通的工会,而不是一个工会,因为他在样本集中没有返回任何重复项。我只是在考虑不可避免的“Das Das”记录。我只是好奇,经过认证的java/php开发人员是否非常有必要创建一个表,填充它并执行查询,以确保这种琐碎的查询真正起作用?;-)@虫族:额外的严格只需要2分钟。字面上可以将其视为一个小型SQL单元测试。如您所愿;-)顺便说一句,sql的单元测试通常作为SP实现,而不是作为数据实现,这只是因为您的测试不是自动化的;-)编写这样的小测试是非常明智的,看到答案中的“工作”让人耳目一新。好奇的是,经过认证的java/php开发人员是否非常有必要创建一个表,填充它并执行查询,以确保这种琐碎的查询真的能工作?;-)@虫族:额外的严格只需要2分钟。字面上可以将其视为一个小型SQL单元测试。如您所愿;-)顺便说一句,sql的单元测试通常作为SP实现,而不是作为数据实现,这只是因为您的测试不是自动化的;-)写这样的小测试是非常明智的,看到答案中的“有效”是令人耳目一新的。@Suman,请随意接受最适合你的答案。@Suman:一年半后你仍然没有接受答案。为什么不呢?@Tomalak Geret'kal:只剩下8个月;-)@苏曼,请随意接受对你最有效的答案。@苏曼:一年半后,你仍然没有接受答案。为什么不呢?@Tomalak Geret'kal:只剩下8个月;-)你会看到firstname和lastname都是“Das”的行吗?你会看到firstname和lastname都是“Das”的行吗?