SQL查询错误

Geo*_*pts 1 sql-server

请检查SQL模式并查询SQL Fiddle

如果有人能解决问题,我会得到带有NULL值的重复记录.

问候

这就是我得到的:

| MEM_ID |      MEM_EMAIL | GENDER | EDUCATION |  PROFESSION |
|--------|----------------|--------|-----------|-------------|
|      1 |   it@email.com |   Male |    (null) |      (null) |
|      1 |   it@email.com | (null) |  Graduate |      (null) |
|      1 |   it@email.com | (null) |    (null) |    Engineer |
|      2 | info@email.com | Female |    (null) |      (null) |
|      2 | info@email.com | (null) |  Graduate |      (null) |
|      2 | info@email.com | (null) |    (null) | Not Working |
Run Code Online (Sandbox Code Playgroud)

但是我需要

| MEM_ID |      MEM_EMAIL | GENDER | EDUCATION |  PROFESSION |
|--------|----------------|--------|-----------|-------------|
|      1 |   it@email.com |   Male |  Graduate |    Engineer |
|      2 | info@email.com | Female |  Graduate | Not Working |
Run Code Online (Sandbox Code Playgroud)

|

Dou*_*rch 5

是的,着名的内部平台效应,您尝试通过创建"属性 - 值"表并为数据类型和值分配魔术字符串来实现关系,然后尝试在运行时检索具有大量自连接的值.

这条道路上只有疯狂.SQL已包含用于实施键值和参照完整性的功能; 不要试图自己实现这一点.这特别令人沮丧,因为您的架构实际上非常简单:

CREATE TABLE [dbo].Member(
    ID INT PRIMARY KEY,
    Email Varchar(50) NOT NULL,
    GenderID INT NOT NULL,
    EducationID INT,
    ProfessionID INT
)

CREATE TABLE [dbo].Gender(
    GenderID INT PRIMARY KEY,
    GenderName Varchar(50) NOT NULL
)

CREATE TABLE [dbo].Education(
    EducationID INT PRIMARY KEY,
    EducationName Varchar(50) NOT NULL
)

CREATE TABLE [dbo].Profession(
    ProfessionID INT PRIMARY KEY,
    ProfessionName Varchar(50) NOT NULL
)
Run Code Online (Sandbox Code Playgroud)

将您的魔术值分配给Gender,Education和Profession行,并将其ID分配给Member.您可以使用简单的方法执行完整查找:

SELECT ID, Email, GenderName, EducationName, ProfessionName
FROM Member m
    JOIN Gender g ON g.GenderID=m.GenderID
    LEFT JOIN Education e ON e.EducationID=m.EducationID
    LEFT JOIN Profession p ON p.ProfessionID=m.ProfessionID
WHERE ...
Run Code Online (Sandbox Code Playgroud)

你想强制执行价值观?制作Member专栏NOT NULL.比方说,只允许Education每个成员每行的一个实例?外键约束已经支持这一点,无需创建自己的查询语言.