Breaking News
Loading...
20/03/2014

Qualifying Column Names trong Subqueries SQL Server

Khi dùng subquery trong SQL Server, có một behavior rất thú vị, ta xem đoạn code sau:

CREATE TABLE dbo.Product
    (
      Id INT PRIMARY KEY
    , Name VARCHAR(50)
    , CategoryID INT
    )
CREATE TABLE dbo.Category
    (
      Id INT PRIMARY KEY
    , Name VARCHAR(50)
    )
INSERT INTO dbo.Category
        ( Id
        , Name
        )
        SELECT 1
              , 'Cutlary'
        UNION
        SELECT 2
              , 'Glassware'
INSERT INTO dbo.Product
        ( Id
        , Name
        , CategoryId
        )
        SELECT 1
              , 'Knife'
              , 1
        UNION
        SELECT 2
              , 'Fork'
              , 1
        UNION
        SELECT 3
              , 'Spoon'
              , 1
        UNION
        SELECT 4
              , 'Tumbler'
              , 2
        UNION
        SELECT 5
              , 'Pint Glass'
              , 3

--Để ý câu lệnh này
SELECT *
    FROM dbo.Product
    WHERE CategoryId NOT IN ( SELECT CategtoryId
                                FROM dbo.Category )

Ở câu select cuối cùng, ta thấy cột CategoryID rõ ràng không tồn tại trong table Category, nhưng câu lệnh select vẫn thực thi không có lỗi xảy ra, nguyên nhân là nếu ta viết subquery dạng này, column CategoryID không tồn tại trong table Category, nhưng nó lại tồn tại trong table Product, thì SQL Server chấp nhận điều này, nên không có lỗi.

Kiến thức này tôi đã được thầy minh họa khi học SQL Server ở trung tâm tin học khoa học tự nhiên, nhưng quả thật đã quên khi tôi vô tình đọc lại kiến thức này.

Tham khảo tại đây: http://technet.microsoft.com/en-us/library/ms178050(v=sql.105).aspx

0 comments:

Post a Comment

 
Toggle Footer