从多个表中选择,如果找不到则忽略

mzillmmw  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(315)

使用这个查询,我从多个表中选择行。不幸的是,如果一个表中不存在行,那么所有表中的行都不会返回。因为我在用and运算符。
所以,我想修改这个查询,如果找不到值,它将忽略一个表,但返回找到值的其余表。
以下是mysql查询:

foreach ($courseArr as $term) {
$term = trim($term);
if (!empty($term)) {

        $courseSectionSql[] = "courseDataApp.course = '$term' AND courseDataApp.section = '$sectionArr[$i]'";

    $i++;

}

}

$data = $db->rawQuery("SELECT courseDataApp.*, facultyDatabase.*, books.* 
                        FROM courseDataApp
                        INNER JOIN facultyDatabase ON facultyDatabase.initial = courseDataApp.faculty
                        INNER JOIN books           ON books.course = courseDataApp.course  WHERE ".implode(' OR ', $courseSectionSql));

以下是回报:

{
"id":11,
// courseDataApp values 
"faculty":"AKH1", 
"course":"CSE241",
"section":"7",
.
.
.
.
.
.
.

// facultyDatabasevalues     
"initial":"AKH1",    
"name":"Ms. Kamal Habi",
"dept":"ECE",
.
.
.
.
.
.

// books values

"books": "Digital Logic Design"
},

所以问题是,当从facultydatabase或books表中找不到值时,其余的数据将不会返回。我只想让它忽略这一点,展示我们的发现。就像工会。

zbdgwd5y

zbdgwd5y1#

正如一些注解所指出的那样,您使用的是过时的语法,即内部联接表,这将导致您得到的结果。你需要左键加入表格。因此,即使左联接表中没有条目,也会有结果。像这样的东西应该管用

SELECT courseDataApp.*, facultyDatabase.*, books.*
FROM courseDataApp
LEFT JOIN facultyDatabase ON facultyDatabase.initial = courseDataApp.faculty
LEFT JOIN books           ON books.course = courseDataApp.course
    WHERE courseDataApp.course = '$term' 
      AND courseDataApp.section = '$sectionArr[$i]'

这样写的话,您将有一个与当前语法中的查询等价的查询,如果内部联接表中没有条目,它将不会返回任何内容。

SELECT courseDataApp.*, facultyDatabase.*, books.* 
FROM courseDataApp
INNER JOIN facultyDatabase ON facultyDatabase.initial = courseDataApp.faculty
INNER JOIN books           ON books.course = courseDataApp.course
    WHERE courseDataApp.course = '$term' 
      AND courseDataApp.section = '$sectionArr[$i]'

相关问题