Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL中的内部联接,其中一个表包含多个结果_Sql_Inner Join_Entity Attribute Value - Fatal编程技术网

SQL中的内部联接,其中一个表包含多个结果

SQL中的内部联接,其中一个表包含多个结果,sql,inner-join,entity-attribute-value,Sql,Inner Join,Entity Attribute Value,我有两张桌子: 第一张表: MEMBERS: ID | FIRSTNAME | LASTNAME | 1 Jack Smith 2 Jane Baker 3 Peter Little 第二个表: DETAILS: SUBSCRIBER_ID | FIELD_ID | FIELD_VALUE | 1

我有两张桌子:

第一张表:

MEMBERS:
ID    |    FIRSTNAME    |    LASTNAME    |
1          Jack              Smith
2          Jane              Baker
3          Peter             Little
第二个表:

DETAILS:    
SUBSCRIBER_ID    |    FIELD_ID    |    FIELD_VALUE    |
1                     1                Blue
1                     2                Dogs
1                     3                March
2                     1                Pink
2                     2                Cats
2                     3                June
3                     1                Black
3                     2                Birds
3                     3                September
字段_ID表示成员上的其他详细信息。i、 e

1 = Favorite color
2 = Favorite animal
3 = Favorite month
我想从DETAILS表中提取一个包含其主要信息成员和额外信息的报告,其中SUBSCRIBER_ID=MEMBERS中的ID。因此,对于Jane来说,它看起来像:

  • 面包师
  • 粉红的
  • 六月
更新:

我使用了以下SQL语句,并提取了所需的数据,但显示结果与我所寻找的不同:

挑选 成员。, 细节。 来自成员内部联接详细信息 ON members.id=details.subscriber\u id 其中jos_osmembership_subscribers.id='29'

(如果仅将记录减少为一名成员)

我在这里得到的结果是:

Jane | Baker | Pink
Jane | Baker | Cats
Jane | Baker | June
而我正在寻找

Jane | Baker | Pink | Cats | June
我使用的是我知道是100%错误的以下输出:)

实际上,我正在寻找一些可以让我输出的东西,比如:

if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        echo "Results:" . $row["ID"] . "|";
        echo "" . $row["FIRSTNAME"] . "|";
        echo "" . $row["LASTNAME"] . "|";
        echo "" . $row["color"] . "|";
        echo "" . $row["animal"] . "|";
        echo "" . $row["month"] . "|";
}

干杯

使用和
内部连接

SELECT ID, FIRSTNAME, LASTNAME, SUBSCRIBER_ID, FIELD_ID, FIELD_VALUE
FROM MEMBERS m
INNER JOIN DETAILS d ON m.ID = d.SUBSCRIBER_ID

您正在使用哪个数据库?如果是oracle,请尝试使用sys connect by path将所有三个详细信息按每人一行列出 查询应该如下所示

SELECT id, 
       firstname, 
       lastname, 
       Sys_connect_by_path(field_value, ',') 
FROM   members m, 
       details d 
WHERE  m.id = d.subscriber_id 
START WITH id = 1 
CONNECT BY PRIOR subscriber_id = id 
ORDER  BY id 

基本上,您至少有3种选择:

  • 按照Matt的建议使用
    内部连接
    ,并注意表示层中数据的格式设置(在您的例子中是PHP)。
    这种方法的主要优点是易于编写和维护,并且不需要对数据库进行任何更改
  • 创建一个将显示详细信息表的视图,并在该表上使用
    内部联接。
    主要的好处是,您将只选择所需的数据,并且可以保留您的数据库设计
  • 更改数据库结构并将详细信息移动到members表中的列。
    这种方法的主要缺点是需要更改数据库,但主要好处是一切都会变得更简单。
    如果您保存的详细信息易于更改,请不要使用此选项(我的意思是,如果您希望继续添加/删除每个成员的详细信息)。如果是这种情况,那么使用第一个选项,因为它将是最简单的编写和维护方法

  • (实体-属性-价值模型)

    @我的答案对你有用吗?干杯,马特。这种格式的问题在于,它为每个字段_值显示一个新行。我将用我得到的结果更新我的原始问题。因此,您希望它像问题中一样显示,每行有一个单词吗?虽然可能与此问题无关,但请添加您正在使用的DBMS(Postgres、Oracle等)的标记,刚刚用首选显示结果更新了它。干杯,伙计。使用MySQL并用PHP呈现结果。
    SELECT id, 
           firstname, 
           lastname, 
           Sys_connect_by_path(field_value, ',') 
    FROM   members m, 
           details d 
    WHERE  m.id = d.subscriber_id 
    START WITH id = 1 
    CONNECT BY PRIOR subscriber_id = id 
    ORDER  BY id