簡體   English   中英

我也可以使用子查詢的結果嗎?

[英]Can I use a subquery's result as well?

我有2張桌子:

廣告:字段IDABC

+----+---+-------+------+
| ID | A | B     | C    |
+----+---+-------+------+
|  1 | x | y     | z    |
|  2 | c | v     | b    |
|  3 | n | n     | m    |
+----+---+-------+------+

請求:字段IDAdIDStatus

+----+------+----------+
| ID | AdID |  Status  |
+----+------+----------+
|  3 |    1 | approved |
|  4 |    2 | pending  |
|  5 |    3 | rejected |
+----+------+----------+

ID (來自Ads )= AdID (來自Requests )。

我有查詢:

SELECT * FROM Ads WHERE ID IN (SELECT AdID FROM Requests WHERE Status = 'approved' OR Status = 'rejected')

這使我獲得了Ads ID為13的行。 現在我的問題是,我是否也可以使用子查詢中的“批准”或“拒絕”?

那么有沒有辦法我可以說:

$sql="SELECT * FROM Ads WHERE ID IN (SELECT AdID FROM Requests WHERE Status = 'approved' OR Status = 'rejected')";
$result=mysqli_query($con, $sql);
while($row = mysqli_fetch_assoc($result)) {
    echo $row['Status']; //<--- doesn't work right now. Want it to say 'approved'/'rejected'
} 

它有效嗎?

查詢中的where ... in基本上是一個過濾器。 您可以對過濾聯接執行相同的操作:

SELECT  * 
FROM    Ads a
JOIN    Requests r
ON      a.ID = r.AdID
WHERE   r.Status in ('approved', 'rejected')

where ... in過濾器不同, inner join過濾器在結果中包括來自另一個表的列。

它應該給你一個錯誤。 您只選擇了表格廣告,沒有狀態列。 乍一看,如果您不需要其他列,則可以查詢表Requests

Select /*Distinct*/ /*Adid, */ Status from Requests
 WHERE Status = 'approved' OR Status = 'rejected'

如果您還需要廣告中的一些列,請加​​入

 Select a.Id, a.A,R.Status 
 from Ads a inner join Requests r on a.ID=r.AdId
 WHERE Status = 'approved' OR Status = 'rejected'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM