【发布时间】:2018-11-27 16:41:03
【问题描述】:
使用此查询,我从多个表中选择行。不幸的是,如果一个表中不存在一行,那么所有表中的行都不会返回。这是因为我使用的是 AND 运算符。
所以,我希望修改这个查询,如果找不到值,where 将忽略一个表,但返回找到该值的其余表。
这是 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 表的值时,其余数据将不会返回。我只是希望它忽略这一点,显示发现的内容。喜欢联盟。
【问题讨论】:
-
请不要使用旧的基于逗号的隐式连接并使用现代Explicit
Joinbased syntax -
使用左连接或联合所有