当我使用子查询时,我遇到了这种情况。任何人都可以向我解释哪一个是有效的,以及案例1优于案例2的情况,反之亦然。
在案例1中,我使用了3个子查询,总共有4个选择操作,需要执行。
案例1
SELECT * FROM t
WHERE Cid = (SELECT cid FROM s WHERE id = $sid)
AND Bid = (SELECT bid FROM s WHERE id = $sid)
AND Eid = (SELECT eid FROM s WHERE id = $sid)
在案例2中,我从数据库中检索了一些值并再次执行mysql查询。这里mysqli_query执行了两次,但只有一次我们使用了。
案例2
$res = mysqli_query($con,"SELECT cid,bid,eid FROM s WHERE id = $sid");
$row = mysqli_fetch_array($r,MYSQL_ASSOC);
"SELECT * FROM t WHERE Cid = $row[cid] AND Bid = $row[bid] AND Eid = $row[eid]";
还是其他更好的解决方案?任何帮助是极大的赞赏。感谢
答案 0 :(得分:2)
都不是。如果可以使用JOIN
,则不需要子查询。
SELECT t.* FROM t
JOIN s ON t.Cid = s.cid AND t.Bid = s.bid AND t.Eid = s.eid
WHERE s.id = $sid