我使用两个查询来获取结果,但我想让它们成为一个查询并执行它以获得结果。这是场景:
查询1:
select id from tableA where reference_id = 2
并获得" Id"我需要执行另一个查询
查询2:
Select * from tableB where id = "(Id coming from query one)"
是否可以使它们成为一个查询???如果是,那么请指导我。提前谢谢。
答案 0 :(得分:2)
替代使用INNER JOIN。
SELECT tableA.id, tableB.column1, tableB.column2 FROM tableA
INNER JOIN tableB ON tableA.id = tableB.id
WHERE
tableA.reference_id = 2
答案 1 :(得分:2)
您可以使用加入或子查询
来创建它使用子查询
Select * from tableB where id in (select id from tableA where reference_id = 2)
使用加入
Select table1.id, table1.column_name2, table2.ref_id, table2.column_name2 from table1 leftjoin table2 on table1.id=table1.ref_id where table2.column_name2=2
答案 2 :(得分:1)
是这样的
SELECT
a.id,
b.*
FROM
tableB AS b
JOIN
tableA as a ON a.reference_id = b.id
WHERE
b.id = :id
:id
是PDO
的命名占位符,我强烈推荐使用。
$stmt = $PDO->prepare($sql);
$stmt->execute([':id'=>2]);
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
现在乍一看你可能会认为这就像@Karlo Kokkak的回答。我正在使用Join
而不是Inner Join
。开玩笑,我知道他们是一回事。我只是想要一个更好的方式来表达它然后"它们是相同的东西"。
真正的区别在于我实际上使用reference_id
作为外键字段。我首先用One关系排列表格,然后用Many关系排列第二。
tableB与tableA具有一对多关系,因为tableA中包含FK。因此,tableA中可以有许多引用tableB的记录。假设reference_id
是FK,但我不知道它可能是什么。如果一个表中的id
是主键,那么我认为这是一个可怕的设计,然后另一个表中的id
是FK。
无论如何,我的桌子安排是倒退到那个,但IMO是正确的方式(在大多数情况下)。这可能是OP的过度。
最后一件事是我在我的预备声明中使用过。
干杯。
答案 3 :(得分:0)
简单。使用此代码。
SELECT * FROM tableA, tableB WHERE tableA.reference_id = 2 AND tableB.id=tableA.id;
答案 4 :(得分:0)
是的,您需要使用LEFT JOIN。
SELECT
a.id,
b.column_name as column_from_tableA,
b.id,
b.column_name as column_from_tableB
FROM tableA a
LEFT JOIN tableB b
ON b.id = a.id
WHERE a.reference_id=2;
答案 5 :(得分:0)
带子查询;
SELECT column-names
FROM table-name1
WHERE value IN (SELECT column-name
FROM table-name2
WHERE condition)
所以你的查询是=>
Select * from tableB where id IN (select id from tableA where reference_id = 2)