1

category_parent = id でそれ自体に関連するカテゴリ名の単純なテーブルがあります。子を持たないレコードを選択する必要があります。

他の回答から、私はこの声明をまとめました:

SELECT cat.category_name AS 'Child Name', cat.id AS 'Child ID',
cat.category_parent AS 'Childs Parent', cat_par.category_name AS 'Parent Name', 
cat_par.id AS 'Parent ID'
FROM category AS cat
LEFT JOIN category AS cat_par ON cat.category_parent = cat_par.id
WHERE cat_par.id IS NULL;

これにより、PARENT を持たないレコードが正常に選択されます。最後の句をに変更しようとしWHERE cat.category_parent IS NULLましたが、まだ空になりました。

別の回答に基づいて、このステートメントも試しました。

SELECT cat.category_name AS 'Child Name', cat.id AS 'Child ID', 
cat.category_parent AS 'Childs Parent' cat_par.category_name AS 'Parent Name', 
cat_par.id AS 'Parent ID'
FROM category AS cat
WHERE NOT EXISTS 
(SELECT id FROM category AS cat_par WHERE cat.category_parent = cat_par.id);

エラーを返すものNo value given for one or more required parameters.

4

4 に答える 4

3
Select p.id, p.category_name
From category As p
Where Not Exists (
  Select 'x' 
  From Category c 
  Where c.category_parent = p.id
)
于 2012-10-22T13:51:14.430 に答える
2

関係は十分に理解できたと思います。これはどう?

SELECT cat.*
FROM category cat
WHERE cat.id not in (
   SELECT distinct category_parent FROM category
);
于 2012-10-22T13:50:56.637 に答える
1

子のないレコードの ID とカテゴリ名だけが必要な場合は、これも機能します。

SELECT
  category.id,
  category.category_name
FROM
  category LEFT JOIN category AS category_1
    ON category.id = category_1.category_parent
WHERE
  category_1.category_parent IS NULL

このクエリは見栄えが良いと思います。ただし、親の名前も必要な場合は、次のように使用できます。

SELECT
  category.id,
  category.category_name,
  category_1.category_name
FROM
  (category LEFT JOIN category AS category_2
    ON category.id = category_2.category_parent)
  LEFT JOIN category AS category_1
    ON category.category_parent = category_1.ID
WHERE
  category_2.category_parent Is Null;

はい、もう少し複雑になります。これは単なる sql の演習ですが、代わりに Exists バージョンを使用することをお勧めします。

于 2012-10-22T14:29:39.443 に答える
0

2 番目のクエリの問題は、句に含まcat_par.category_nameれていないにもかかわらず、結果セットに含めようとしていることです。FROMEXISTS サブクエリでテーブルから列を返すことはできません。

あなたは次のことを望んでいます:

SELECT 
    cat.category_name AS 'Child Name', 
    cat.id AS 'Child ID', 
    cat.category_parent AS 'Childs Parent',
    cat_par.category_name AS 'Parent Name',
    cat_par.id AS 'Parent ID'
FROM 
    category AS cat
    LEFT JOIN category AS cat_par ON cat.category_parent = cat_par.id
WHERE 
    NOT EXISTS 
    (SELECT 
        NULL 
    FROM 
        category AS cat_childless 
    WHERE cat.id = cat_childless.category_parent);
于 2012-10-22T13:56:30.280 に答える