@(一隻心中無碼的程序員)專欄程序員
- ~
題目描述
film表
字段 說明
film_id 電影id
title 電影名稱
description 電影描述信息code
CREATE TABLE IF NOT EXISTS film (
film_id smallint(5) NOT NULL DEFAULT '0',
title varchar(255) NOT NULL,
description text,
PRIMARY KEY (film_id));ip
category表
字段 說明
category_id 電影分類id
name 電影分類名稱
last_update 電影分類最後更新時間it
CREATE TABLE category (
category_id tinyint(3) NOT NULL ,
name varchar(25) NOT NULL, last_update
timestamp,
PRIMARY KEY ( category_id ));io
film_category表
字段 說明
film_id 電影id
category_id 電影分類id
last_update 電影id和分類id對應關係的最後更新時間ast
CREATE TABLE film_category (
film_id smallint(5) NOT NULL,
category_id tinyint(3) NOT NULL, last_update
timestamp);date
使用join查詢方式找出沒有分類的電影id以及名稱程序
解題思路是運用 LEFT JOIN 鏈接兩表,用 IS NULL 語句限定條件: 一、用 LEFT JOIN 鏈接 film 和 film_category,限定條件爲 f.film_id = fc.film_id,即鏈接電影id和電影分類id,若是電影沒有分類,則電影分類id顯示null 二、再用 WHERE 來限定條件 fc.category_id IS NULL 選出沒分類的電影 /** 注意:最後一句若寫成 ON f.film_id = fc.film_id AND fc.category_id IS NULL,則意義變成左鏈接兩表 film_id 相同的記錄,且 fc.category 的值爲 null,因爲 fc.category的值不爲null,即(f.film_id = fc.film_id AND fc.category_id IS NULL)恆爲FALSE,因此左鏈接後只顯示film表的數據,而 film_category 表的數據全爲 null**/ SELECT f.film_id, f.title FROM film f LEFT JOIN film_category fc ON f.film_id = fc.film_id WHERE fc.category_id IS NULL