多表SQL查询返回意外结果

时间:2013-03-07 02:21:45

标签: sql sql-server database relational-database

我有一张名为'ELEMENTS'的桌子。在此查询中,应该有与ELEMENTS中的行一样多的结果。

ELEMENT表的数值与其他表中的文本值相对应。我画了这张有关系的照片。这些行表示相应的键,圆圈是我需要的文本值。

enter image description here

这是我的问题:

SELECT  ELEMENTS.RID,
        TAXONOMIES.SHORT_DESCRIPTION,
        type,
        ELEMENT_NAME,
        ELEMENT_ID,
        SUBSTITUTION_GROUPS.DESCRIPTION,
        namespace_prefix,
        datatype_localname 
FROM ELEMENTS,SUBSTITUTION_GROUPS,TAXONOMIES,SCHEMAS,DATA_TYPES  
WHERE
    ELEMENTS.TAXONOMY_ID = TAXONOMIES.RID AND
    ELEMENTS.SUBSTITUTION_GROUP_ID = SUBSTITUTION_GROUPS.RID AND 
    ELEMENTS.ELEMENT_SCHEMA_ID = SCHEMAS.RID AND
    ELEMENTS.DATA_TYPE_ID = DATA_TYPES.RID

这给了我20个左右的记录,当时我应该有数千个。我查看了记录,但无法弄清楚它所显示的记录中的模式。

1 个答案:

答案 0 :(得分:3)

据推测,您的尺寸为NULL或未完全填充。您可以使用left outer join

解决此问题
SELECT ELEMENTS.RID, TAXONOMIES.SHORT_DESCRIPTION, type, ELEMENT_NAME, ELEMENT_ID, 
       SUBSTITUTION_GROUPS.DESCRIPTION, namespace_prefix, datatype_localname 
FROM ELEMENTS left outer join
     SUBSTITUTION_GROUPS
     on ELEMENTS.SUBSTITUTION_GROUP_ID = SUBSTITUTION_GROUPS.RID left outer join
     TAXONOMIES
     on ELEMENTS.TAXONOMY_ID = TAXONOMIES.RID left outer join
     SCHEMAS
     on ELEMENTS.ELEMENT_SCHEMA_ID = SCHEMAS.RID left outer join
     DATA_TYPES
     on ELEMENTS.DATA_TYPE_ID = DATA_TYPES.RID

如果您正在学习SQL,您应该学习:

  1. 适当的ANSI标准JOIN语法
  2. 使用来自
  3. 的表格为查询中的每个字段添加前缀
  4. 使用简短但易于理解的别名,例如“e”表示元素,“t”表示分类。
相关问题