我如何 select 来自多列的唯一值(每个值都是唯一的而不是总行)
How do I select unique values from multiple columns (each value being unique not the total row)
我有一个现有的 table,它有很多行,如下所示:
id
Product
Tel1
Tel2
Tel3
Tel4
1
A
1234
1234
1234
1234
2
B
1234
1234
1234
3750
3
C
1234
1235
1234
1234
4
D
1234
1234
1234
1234
5
E
9876
1234
3654
6583
6
F
1234
4567
1234
1234
6
G
9876
1234
1234
2785
7
etc...
1234
1234
1234
1234
还有其他列,但这演示了此问题的重要列。
它被用作php前端的一种telephone目录,许多号码是相同的,特别是对于类似的产品。我需要创建一个新的 table,我可以在前端显示关于每个数字的一些额外信息,而当前的 table 很长,总共有很多 phone 个数字所以我手动查看它并找到我想放入新的 table.
中的所有数字是不切实际的
我需要 运行 某种 select 查询来获取当前 table 具有的所有 phone 数字列中所有唯一数字的列表.这只是一个一次性查询,可以让我获得一个列表,然后我可以用它创建一个新的 table,所以我不关心查询效率。
结果应如下所示:
numbers
1234
0987
3654
9876
etc...
只是列出所有唯一号码。然后我可以获取这些数据并将其放入这个新的 table 并开始自己添加其他列以获取我提到的其他信息,然后只需使用一个典型的查询来在我的前端显示这些额外数据,当其中一个数字出现时来自原始 table 的 select 由用户编辑,在我的新 table.
中使用 phone 号码作为 ID
我已经尝试寻找解决方案并且我已经知道 DISTINCT 命令,但我对此的理解是它只会产生每列不相同的结果列表,这不是我想要的,这是我似乎从我的关键字中获得的搜索结果。
一旦我有了一个唯一的列表并且我不必手动查看原始的大 table 来获取它们,我就可以手动创建新的 table 并手动插入所有手动唯一编号,但如果我还可以以某种方式组合查询以插入到我创建的新 table 中,则可以加分。 (如果这甚至可能?)
编辑:对于那些提到规范化的人,虽然我原则上不反对,但我不能以任何方式改变现有的 table,因为它与我的第三方软件保持同步没有直接控制权,因此它必须保留在当前模式中。我可以用其他 table 做任何我喜欢的事,但我不能碰原始的 table,所以我仍然可以使用 phpmyadmin 来用从这个其他软件中获取的新版本覆盖它将来。
根据您的示例,您可以使用 select 并集,每个列需要一个 select
select tel1
from my_table
union
select tel2
from my_table
union
select tel3
from my_table
union
select tel4
from my_table
然后您可以使用创建 select
创建 table
create table my_new_table
select tel1 tel
from my_table
union
select tel2
from my_table
union
select tel3
from my_table
union
select tel4
from my_table
假设table名字是products
,你可以使用下面的查询
select tel1 as numbers from products
union
select tel2 from products
union
select tel3 from products
union
select tel4 from products;
它将输出以下内容:
numbers
1234
9876
1235
1001
1111
3750
2785
强制性 PSA:
- 请在创建新 table 时规范化 table 以使生活更轻松。
我会执行查询并集以按列获取所有不同的电话,然后对该电话并集执行查询以仅获取一次:
SELECT DISTINCT `Tel` FROM
(
SELECT DISTINCT `Tel1` AS `Tel` FROM products
UNION
SELECT DISTINCT `Tel2` AS `Tel` FROM products
UNION
SELECT DISTINCT `Tel3` AS `Tel` FROM products
UNION
SELECT DISTINCT `Tel4` AS `Tel` FROM products
) all_telephones
我有一个现有的 table,它有很多行,如下所示:
id | Product | Tel1 | Tel2 | Tel3 | Tel4 |
---|---|---|---|---|---|
1 | A | 1234 | 1234 | 1234 | 1234 |
2 | B | 1234 | 1234 | 1234 | 3750 |
3 | C | 1234 | 1235 | 1234 | 1234 |
4 | D | 1234 | 1234 | 1234 | 1234 |
5 | E | 9876 | 1234 | 3654 | 6583 |
6 | F | 1234 | 4567 | 1234 | 1234 |
6 | G | 9876 | 1234 | 1234 | 2785 |
7 | etc... | 1234 | 1234 | 1234 | 1234 |
还有其他列,但这演示了此问题的重要列。
它被用作php前端的一种telephone目录,许多号码是相同的,特别是对于类似的产品。我需要创建一个新的 table,我可以在前端显示关于每个数字的一些额外信息,而当前的 table 很长,总共有很多 phone 个数字所以我手动查看它并找到我想放入新的 table.
中的所有数字是不切实际的我需要 运行 某种 select 查询来获取当前 table 具有的所有 phone 数字列中所有唯一数字的列表.这只是一个一次性查询,可以让我获得一个列表,然后我可以用它创建一个新的 table,所以我不关心查询效率。
结果应如下所示:
numbers |
---|
1234 |
0987 |
3654 |
9876 |
etc... |
只是列出所有唯一号码。然后我可以获取这些数据并将其放入这个新的 table 并开始自己添加其他列以获取我提到的其他信息,然后只需使用一个典型的查询来在我的前端显示这些额外数据,当其中一个数字出现时来自原始 table 的 select 由用户编辑,在我的新 table.
中使用 phone 号码作为 ID我已经尝试寻找解决方案并且我已经知道 DISTINCT 命令,但我对此的理解是它只会产生每列不相同的结果列表,这不是我想要的,这是我似乎从我的关键字中获得的搜索结果。
一旦我有了一个唯一的列表并且我不必手动查看原始的大 table 来获取它们,我就可以手动创建新的 table 并手动插入所有手动唯一编号,但如果我还可以以某种方式组合查询以插入到我创建的新 table 中,则可以加分。 (如果这甚至可能?)
编辑:对于那些提到规范化的人,虽然我原则上不反对,但我不能以任何方式改变现有的 table,因为它与我的第三方软件保持同步没有直接控制权,因此它必须保留在当前模式中。我可以用其他 table 做任何我喜欢的事,但我不能碰原始的 table,所以我仍然可以使用 phpmyadmin 来用从这个其他软件中获取的新版本覆盖它将来。
根据您的示例,您可以使用 select 并集,每个列需要一个 select
select tel1
from my_table
union
select tel2
from my_table
union
select tel3
from my_table
union
select tel4
from my_table
然后您可以使用创建 select
创建 tablecreate table my_new_table
select tel1 tel
from my_table
union
select tel2
from my_table
union
select tel3
from my_table
union
select tel4
from my_table
假设table名字是products
,你可以使用下面的查询
select tel1 as numbers from products
union
select tel2 from products
union
select tel3 from products
union
select tel4 from products;
它将输出以下内容:
numbers |
---|
1234 |
9876 |
1235 |
1001 |
1111 |
3750 |
2785 |
强制性 PSA:
- 请在创建新 table 时规范化 table 以使生活更轻松。
我会执行查询并集以按列获取所有不同的电话,然后对该电话并集执行查询以仅获取一次:
SELECT DISTINCT `Tel` FROM
(
SELECT DISTINCT `Tel1` AS `Tel` FROM products
UNION
SELECT DISTINCT `Tel2` AS `Tel` FROM products
UNION
SELECT DISTINCT `Tel3` AS `Tel` FROM products
UNION
SELECT DISTINCT `Tel4` AS `Tel` FROM products
) all_telephones