Php 连接两个表,其中一个不是uniqe

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

大家好。我需要根据这些参数连接两个表:

1) 我只需要第一个表和第二个表中的数据

2) 第二个表中的数据可以有更多的行附加到第一个表的一行,但我需要这些行只显示一次

我试过这个

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,这正是我想要的。我想不出怎么去问谷歌叔叔。谢谢,这正是我想要的。我想不出怎么去问谷歌叔叔。谢谢