Как дела многие ко многим внешним объединениям таблицы?

Это невозможно сделать без взлома. jointplot вызывает метод JointGrid, который в свою очередь создает новый объект figure каждый раз, когда он вызывается.

Таким образом, взлом состоит в том, чтобы сделать два сундука (JG1 JG2), затем сделать новую фигуру, а затем перенести объекты осей из JG1 JG2 в новую созданную фигуру.

Наконец, мы корректируем размеры и позиции подзаголовков на новом рисунке, который мы только что создали.

JG1 = sns.jointplot("C1", "C2", data=df, kind='reg')
JG2 = sns.jointplot("C1", "C2", data=df, kind='kde')

#subplots migration
f = plt.figure()
for J in [JG1, JG2]:
    for A in J.fig.axes:
        f._axstack.add(f._make_key(A), A)

#subplots size adjustment
f.axes[0].set_position([0.05, 0.05, 0.4,  0.4])
f.axes[1].set_position([0.05, 0.45, 0.4,  0.05])
f.axes[2].set_position([0.45, 0.05, 0.05, 0.4])
f.axes[3].set_position([0.55, 0.05, 0.4,  0.4])
f.axes[4].set_position([0.55, 0.45, 0.4,  0.05])
f.axes[5].set_position([0.95, 0.05, 0.05, 0.4])

Это взломать, потому что теперь мы используем частные методы _axstack и _add_key, которые могут и не оставаться такими же, как сейчас, в будущих версиях matplotlib.

14
задан Pyrolistical 16 December 2008 в 19:51
поделиться

5 ответов

SELECT * FROM foo
  LEFT OUTER JOIN (foo2bar JOIN bar ON (foo2bar.bid = bar.bid AND zid = 30))
  USING (fid);

Протестированный на MySQL 5.0.51.

Это не подзапрос, он просто использует круглые скобки для определения приоритета соединений.

17
ответ дан 1 December 2019 в 10:19
поделиться
SELECT * FROM
        foo LEFT JOIN
        (
        Foo2bar JOIN bar
             ON foo2bar.bid = bar.bid AND zid = 30
        )
        ON foo.fid = foo2bar.fid;

непротестированный

6
ответ дан 1 December 2019 в 10:19
поделиться

Разрабатывая его, можно запустить с выбора. Не включайте столбцы, которые Вы не хотите в конечном счете видеть.

SELECT foo.fid, bar.value

Затем мы можем сделать оператор Where, который видит, так же, как Вы выразили его.

SELECT foo.fid, bar.value  
WHERE bar.zid = 30

Теперь хитрая часть для соединения вещей вместе для нашего ИЗ пункта, с помощью ОСТАВЛЕННЫЙ СОЕДИНЕНИЯ, потому что мы хотим видеть каждый клин, существуют ли промежуточные соответствия:

SELECT foo.fid, bar.value  
FROM foo  
LEFT JOIN foo2bar ON foo.fid = foo2bar.fid  
LEFT JOIN bar ON foo2bar.bid = bar.bid  
WHERE bar.zid = 30
OR bar.zid IS NULL
2
ответ дан 1 December 2019 в 10:19
поделиться

Если Вы не возвращаете строку для клина =, 3 затем Ваших сервера повреждаются.

Этот код должен сделать то, что я думаю, что Вы хотите:

SELECT
    F.fid,
    SQ.value
FROM
    dbo.Foo F
LEFT OUTER JOIN
     (
     SELECT F2B.fid, B.value
     FROM dbo.Bar B
     INNER JOIN dbo.Foo2Bar F2B ON F2B.bid = B.bid WHERE B.zid = 30
     ) SQ ON SQ.fid = F.fid

Имеют в виду, что возможно возвратить два значения для клина, если это связано с двумя панелями с zid 30.

2
ответ дан 1 December 2019 в 10:19
поделиться

FWIW, вопрос не действительно о many-many: это могло вполне просто быть сделано как объединение.

А реальный many-many в SQL ПЕРЕКРЕСТНОЕ ОБЪЕДИНЕНИЕ

-1
ответ дан 1 December 2019 в 10:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: