Php 连接两个表,其中一个不是uniqe
大家好。我需要根据这些参数连接两个表: 1) 我只需要第一个表和第二个表中的数据 2) 第二个表中的数据可以有更多的行附加到第一个表的一行,但我需要这些行只显示一次 我试过这个Php 连接两个表,其中一个不是uniqe,php,sql,join,Php,Sql,Join,大家好。我需要根据这些参数连接两个表: 1) 我只需要第一个表和第二个表中的数据 2) 第二个表中的数据可以有更多的行附加到第一个表的一行,但我需要这些行只显示一次 我试过这个 SELECT * FROM table AS p JOIN `table2` AS ps ON (p.id = ps.`id_table2`) ORDER BY p.id 但正如前面提到的,我得到的是重复的 谢谢假设您只关心最终输出,请使用distinct: SELECT
SELECT * FROM table AS p
JOIN `table2` AS ps ON (p.id = ps.`id_table2`)
ORDER BY p.id
但正如前面提到的,我得到的是重复的
谢谢假设您只关心最终输出,请使用distinct:
SELECT distinct * FROM table AS p
JOIN `table2` AS ps ON (p.id = ps.`id_table2`)
ORDER BY p.id
假设您只关心最终输出,请使用distinct:
SELECT distinct * FROM table AS p
JOIN `table2` AS ps ON (p.id = ps.`id_table2`)
ORDER BY p.id
要在结果集中将一组行折叠为一行,请使用
GROUPBY
子句。GROUP BY
子句应指定每个集合中具有相同值的所有列,以便折叠成一行。您的查询不应选择任何不属于GROUP BY
子句的列,除非它们是聚合列,这样RDBMS就可以知道您需要哪些值
如果您只希望一个表中的列在另一个表中有对应的行,那么您根本不需要联接或组
SELECT * FROM table1 WHERE some_column IN (SELECT related_column FROM table2)
或者使用WHERE EXISTS
子句。要在结果集中将一组行折叠成一行,请使用group BY
子句。GROUP BY
子句应指定每个集合中具有相同值的所有列,以便折叠成一行。您的查询不应选择任何不属于GROUP BY
子句的列,除非它们是聚合列,这样RDBMS就可以知道您需要哪些值
SELECT distinct * FROM table AS p
JOIN `table2` AS ps ON (p.id = ps.`id_table2`)
ORDER BY p.id
如果您只希望一个表中的列在另一个表中有对应的行,那么您根本不需要联接或组
SELECT * FROM table1 WHERE some_column IN (SELECT related_column FROM table2)
或者在存在的地方使用子句
SELECT distinct * FROM table AS p
JOIN `table2` AS ps ON (p.id = ps.`id_table2`)
ORDER BY p.id
那就应该去掉重复的?这就是你要找的吗
那就应该去掉重复的?这就是你想要的吗?假设MySQL
:
SELECT *
FROM table1 t1
JOIN table2 t2
ON t2.id =
(
SELECT id
FROM table2 t2i
WHERE t2i.id_table2 = t1.id
ORDER BY
id
LIMIT 1
)
更改ORDER BY
子句以定义您想要的多条记录中的哪一条
在SQL Server
、Oracle
和PostgreSQL
(8.4+)中,使用以下语法:
SELECT *
FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY t1.id ORDER BY t2.id) AS rn
FROM table1 t1
JOIN table2 t2
ON t2.id_table2 = t1.id
) q
WHERE rn = 1
同样,按
相应地更改顺序。假设MySQL
:
SELECT *
FROM table1 t1
JOIN table2 t2
ON t2.id =
(
SELECT id
FROM table2 t2i
WHERE t2i.id_table2 = t1.id
ORDER BY
id
LIMIT 1
)
更改ORDER BY
子句以定义您想要的多条记录中的哪一条
在SQL Server
、Oracle
和PostgreSQL
(8.4+)中,使用以下语法:
SELECT *
FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY t1.id ORDER BY t2.id) AS rn
FROM table1 t1
JOIN table2 t2
ON t2.id_table2 = t1.id
) q
WHERE rn = 1
同样,按
相应地更改顺序。你能给出两个表中数据的简要示例,以及你期望的输出吗?肯定需要查看一些示例数据。你能给出两个表中数据的简要示例,以及你期望的输出吗?肯定需要查看一些示例数据。Thx作为答复,我听说使用“in”子句比joing慢得多,或者不是真的?如果在适当的列上定义了索引,它就不应该是。Thx作为回答,我听说使用“IN”子句比joing慢得多,或者不是真的?如果在适当的列上定义了索引,它就不应该是。Thx,这正是我想要的。我想不出怎么去问谷歌叔叔。谢谢,这正是我想要的。我想不出怎么去问谷歌叔叔。谢谢