我有一个表products和一个表locations,它们以多对多关系与 table 链接在一起products_locations。现在,客户可以选择一组产品,我想运行一个查询,仅选择所有选定产品均可用的位置。
乍一看这似乎很简单,但我发现自己对如何实现这一目标感到非常困惑。我最初以为我可以用类似的东西获得所有正确的位置ID
SELECT location_id
FROM products_locations
WHERE product_id = ALL [the user selected product ids]
Run Code Online (Sandbox Code Playgroud)
但转念一想,这似乎也没有意义( 的结构products_locations非常简单[product_id, location_id]。
任何有关如何构建此类查询的建议将不胜感激。我觉得我忽略了一些基本的东西..
编辑:我正在使用mysql语法/方言
快速示例:给出下表
| products | | locations | | products_locations |
| id | name | | id | name | | product_id | location_id |
|------------| |-----------| |--------------------------|
| 1 | prod1 | | 1 | locA | | 1 | 2 |
| 2 | …Run Code Online (Sandbox Code Playgroud) 再会
我有一个有关 ReentrantReadWriteLocks 的问题。我正在尝试解决一个问题,其中多个读取器线程应该能够在数据结构上并行操作,而一个写入器线程只能单独操作(同时没有读取器线程处于活动状态)。我正在使用 Java 中的 ReentrantReadWriteLocks 来实现这一点,但是从时间测量来看,读取器线程似乎也相互锁定。我认为这不应该发生,所以我想知道我是否实施错误。我的实现方式如下:
readingMethod(){
lock.readLock().lock();
do reading ...
lock.readLock().unlock();
}
writingMethod(){
lock.writeLock().lock();
do writing ...
lock.writeLock().unlock();
}
Run Code Online (Sandbox Code Playgroud)
其中读取方法被许多不同的线程调用。从测量时间来看,即使从未调用写入方法,读取方法也会按顺序执行!关于这里出了什么问题有什么想法吗?提前谢谢你-干杯
编辑:我试图提出一个 SSCCE,我希望这一点很清楚:
public class Bank {
private Int[] accounts;
public ReadWriteLock lock = new ReentrantReadWriteLock();
// Multiple Threads are doing transactions.
public void transfer(int from, int to, int amount){
lock.readLock().lock(); // Locking read.
// Consider this the do-reading.
synchronized(accounts[from]){
accounts[from] -= amount;
}
synchronized(accounts[to]){
accounts[to] += amount;
}
lock.readLock().unlock(); // Unlocking read.
}
// Only one thread …Run Code Online (Sandbox Code Playgroud)