对2个表

时间:2015-12-15 23:14:18

标签: mysql sql

我对sql有基本的了解,并建立了一个必须在24小时内提交的小型数据库。我在这里用sqlfiddle制作了一个模式 http://www.sqlfiddle.com/#!9/28fcd

我需要运行一个查询来搜索一个工作人员(从表格出现或教学)并返回module_code和module_title(从表格课程)中为所述工作人员讲授的课程。 我花了一天半的时间试图解决这个问题(这可能让我很沮丧),现在我迫切需要一些帮助。

表格架构如下。如果这不是事情的完成方式,请道歉。

CREATE TABLE course (
module_code VARCHAR (10),
module_title VARCHAR (40),
PRIMARY KEY (module_code));

CREATE TABLE teaching (
staff VARCHAR (40),
room VARCHAR (10),
PRIMARY KEY (staff));

CREATE TABLE occurrence (
module_code VARCHAR (10),
Instance VARCHAR (1),
staff VARCHAR (40),
year INT (1),
hours INT (2),
PRIMARY KEY (instance, module_code),
FOREIGN KEY (staff) REFERENCES teaching (staff));

INSERT INTO teaching VALUES
('Louise Ashby','C2-07a'),
('Abdul Razak','C2-09'),
('Brennen Tighe','C2-06'),
('Andrew Parker','C2-04'),
('Tim Goddard','C2-04');

INSERT INTO course VALUES
('CPU4000','Core Skills'),
('CPU4003','Introduction to Programming'),
('CPU4005','Networking Fundamentals');

INSERT INTO occurrence VALUES
('CPU4000','A','Louise Ashby',1,5),
('CPU4000','B',NULL,1,0),
('CPU4000','C',NULL,1,0),
('CPU4003','A','Abdul Razak',1,6),
('CPU4003','B','Brennen Tighe',1,6),
('CPU4003','C','Andrew Parker',1,6),
('CPU4005','A','Tim Goddard',1,0),
('CPU4005','B',NULL,1,0),
('CPU4005','C',NULL,1,0);

我正在使用的SQL有点像: SELECT module_title,module_code 从当然,发生 发生在什么地方。路易斯阿什比&#39 ;;

这告诉我Column' module_code'在字段列表中是不明确的

3 个答案:

答案 0 :(得分:0)

select
  `teaching`.staff,
  `course`.module_code,
  `course`.module_title
from
  `teaching`
inner join
  `occurrence` on
  `occurrence`.staff = `teaching`.staff
inner join
  `course` on
  `course`.module_code = `occurrence`.module_code

答案 1 :(得分:0)

查询就像:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

#define N 3



void inputArr1(int arr1[]);
void maxValueC(int maxValue);
void inputArr2(int arr2[], int maxValue);
void inputArr3(int arr1[], int arr3[], int i, int count3);
void printArr3(int arr1[], int arr3[]);


void main()
{
    int i = 0, j = 0, count = 0, count3 = 0, maxValue = 0, arr1[N], arr2[N], arr3[N];

    inputArr1(arr1);

    printf("please enter maxValue: ");
    scanf("%d", &maxValue);
    while (maxValue <= 0)
    {
        maxValueC(maxValue);
    }

    srand(time(NULL));
    inputArr2(arr2, maxValue);

    printf("\nArray1: ");
    for (i = 0; i < N; i++)
    {
        printf("%d ", arr1[i]);
    }
    printf("\nArray2: ");
    for (i = 0; i < N; i++)
    {
        printf("%d ", arr2[i]);
    }

    for (i = 0; i < N; i++)
    {
        for (j = 0; j < N; j++)
        {
            if (arr1[i] != arr2[j])
            {
                count++;
            }
         }
    if (count == N)
        {
            inputArr3(arr1, arr3, i, count3);
        }
    count = 0;  
}
    printArr3(arr1, arr3);

    getch();
}

void inputArr1(int arr1[])
{
    int i;
    for (i = 0;i < N;i++)
    {
        printf("Please enter a digit[%d]: ",i);
        scanf("%d", &arr1[i]);
        printf("\n");
    }
}

void maxValueC(int maxValue)
{
    printf("Please enter a number that is bigger than 0!!!");
    scanf("%d", &maxValue);
}

void inputArr2(int arr2[], int maxValue)
{
    int i;
    for (i = 0; i < N; i++)
    {
        arr2[i] = rand() % (maxValue);
    }
}

void inputArr3(int arr1[], int arr3[], int i, int count3)
{
    arr3[count3] = arr1[i];
    count3++;
}

void printArr3(int arr3[])
{
    int i;
        printf("\nArray3: ");
        for (i = 0; i < N; i++)
        {
            printf("%d", arr3[i]);
        }
}

根据您的架构。但是,在实际应用程序中,您不会使用这样的架构。

答案 2 :(得分:0)

将它们连接在一起时,必须为表提供别名。 *表示全部&#39;。所以上面的查询是从c表中选择满足条件的所有列。模糊的错误可能是因为你没有指定加入表的键。希望有所帮助。

抱歉,打算回复你的评论而不是添加答案。仍然是stackoverflow的新手。