代码之家  ›  专栏  ›  技术社区  ›  Ibrahim Azhar Armar

帮助建立图片库的数据库

  •  2
  • Ibrahim Azhar Armar  · 技术社区  · 14 年前

    我有两张桌子,

    a)相册

    alt text

    b)图片

    alt text

    我正在使用以下查询选择albums.id,albums.cover_picture_id,pictures.url其中albums.cover_picture_id=pictures.id,我要执行以下操作

    select all the values from albums ,但它还应该获取pictures.url和albums.cover_picture_id

    为此,我使用以下SELECT语句

    SELECT 
    albums.id,
    albums.cover_picture_id,
    pictures.url
    FROM albums 
    JOIN pictures 
    ON 
    (
    albums.cover_picture_id = pictures.id
    )
    

    它很好,但我有一个问题,表实体专辑。CopyPixTrimeSID可能包含不存在于PiTras.ID中的值0,所以如果它找到0,它将不会获取值,即使在0中,我也希望从专辑表中取出所有的相册。如何在select语句中添加子句。

    谢谢您

    2 回复  |  直到 14 年前
        1
  •  3
  •   shamittomar    14 年前

    使用 LEFT JOIN 这样地:

    SELECT 
    albums.id,
    albums.cover_picture_id,
    pictures.url
    FROM albums 
    LEFT JOIN pictures 
    ON 
    (
    albums.cover_picture_id = pictures.id
    )
    

    摘自维基百科:

    表a和表B的左外联接(或简单的左联接)的结果始终包含“左”表(a)的所有记录,即使联接条件在“右”表(B)中找不到任何匹配的记录。这意味着,如果ON子句与B中的0(零)条记录匹配,则联接仍将在resultbut中返回一行,其中B中的每一列中都有空值。这意味着左外联接将返回左表中的所有值,加上右表中的匹配值(如果没有匹配的联接谓词,则返回空值)。如果右表返回一行,左表返回多个匹配行,则右表中的值将针对左表中的每个不同行重复。

        2
  •  3
  •   Phil Hunt    14 年前

    试着改变你的 JOIN LEFT JOIN 因为你想包含 albums 即使没有匹配的记录 pictures :

    SELECT 
    albums.id,
    albums.cover_picture_id,
    pictures.url
    FROM albums 
    LEFT JOIN pictures 
    ON 
    (
      albums.cover_picture_id = pictures.id
    )